2017-09-16 33 views
8

Tôi nhận được những lời cảnh báo sau đây trong ứng dụng GTK 3 của tôi:"Phân bổ kích thước để ..." GTK Cảnh báo khi sử dụng Gtk.TreeView bên Gtk.ScrolledWindow

Gtk-CẢNH BÁO **: Phân bổ kích thước __main__+MCVEWindow 0000000004e93b30 mà không gọi gtk_widget_get_preferred_width/height(). Mã này biết kích thước để phân bổ như thế nào?

Những cảnh báo xảy ra khi Gtk.ScrolledWindow chứa Gtk.TreeView được gắn vào lưới, lưới riêng của mình được gắn vào gtk.ApplicationWindow và có đủ các yếu tố cho thanh cuộn để thực sự xuất hiện. Nếu không có đủ yếu tố để làm cho nó có thể cuộn được, cảnh báo sẽ không xuất hiện.

import gi 
gi.require_version("Gtk", "3.0") 
from gi.repository import Gtk as gtk 


class MCVEWindow(gtk.ApplicationWindow): 
    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 

     self._tree_view = gtk.TreeView() 
     self._tree_view.set_hexpand(True) 
     self._tree_view.set_vexpand(True) 

     self.populate_tree_view() # populate tree view with fake items 

     window_column = gtk.TreeViewColumn(
      "Window", gtk.CellRendererText(), 
      text=0 
     ) 
     window_column.set_resizable(True) 
     handle_column = gtk.TreeViewColumn(
      "Handle", gtk.CellRendererText(), 
      text=1 
     ) 
     class_column = gtk.TreeViewColumn(
      "Class name", gtk.CellRendererText(), 
      text=2 
     ) 
     self._tree_view.append_column(window_column) 
     self._tree_view.append_column(handle_column) 
     self._tree_view.append_column(class_column) 

     scrolled_tree_view = gtk.ScrolledWindow() 
     scrolled_tree_view.add(self._tree_view) 

     toolbar = gtk.Toolbar() 

     expand_tree_view_button = gtk.ToolButton(icon_name="list-add") 
     expand_tree_view_button.connect(
      "clicked", 
      lambda e: self._tree_view.expand_all() 
     ) 
     collapse_tree_view_button = gtk.ToolButton(icon_name="list-remove") 
     collapse_tree_view_button.connect(
      "clicked", 
      lambda e: self._tree_view.collapse_all() 
     ) 
     toolbar.insert(expand_tree_view_button, -1) 
     toolbar.insert(collapse_tree_view_button, -1) 

     status_bar = gtk.Statusbar() 
     status_bar.push(
      status_bar.get_context_id("Status message"), 
      "A status message." 
     ) 

     self._master_grid = gtk.Grid() 
     self._master_grid.attach(toolbar, 0, 0, 1, 1) 
     self._master_grid.attach(scrolled_tree_view, 0, 1, 1, 1) 
     self._master_grid.attach(status_bar, 0, 2, 1, 1) 
     self.add(self._master_grid) 

     self.connect("delete-event", gtk.main_quit) 

     self.show_all() 

    def populate_tree_view(self): 
     tree_store = gtk.TreeStore(str, str, str) 
     # Warnings don't occur when there are less than 100 "root" items 
     for i in range(100): 
      item1 = tree_store.append(
       None, 
       ["Window " + str(i + 1), "12345678", "ClassName"] 
      ) 
      for j in range(3): 
       item2 = tree_store.append(
        item1, 
        ["Window " + str(i + 1) + str(i + 2), 
        "12345678", 
        "ClassName"] 
       ) 
       for k in range(5): 
        tree_store.append(
         item2, 
         ["Window " + str(i + 1) + str(j + 1) + str(k + 1), 
         "12345678", 
         "ClassName"] 
        ) 

     self._tree_view.set_model(tree_store) 


class MCVEApp(gtk.Application): 
    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 

    def do_activate(self): 
     MCVEWindow() 
     gtk.main() 


if __name__ == "__main__": 
    MCVEApp().run() 

Bạn sẽ có thể sao chép, dán và chạy mã này nếu bạn đã thiết lập môi trường.

Cảnh báo không tuân theo bất kỳ mẫu cụ thể nào, đôi khi có một cảnh báo, đôi khi hai hoặc nhiều hơn. Các cảnh báo cũng bật lên bất cứ khi nào tôi mở rộng tất cả các mục cây.

phiên bản GTK là 3.22.18

gì có thể gây ra những cảnh báo này?

+0

Bạn có [MCVE] (https://stackoverflow.com/help/mcve) không? – theGtknerd

+0

Có, tôi đã chỉnh sửa câu hỏi. Bạn sẽ có thể chạy nó nếu bạn đã thiết lập môi trường. – Doom8890

+0

Rất tiếc, tôi không thể tạo lỗi đó bằng cách sử dụng Gtk 3.18. Chúng có ảnh hưởng đến khả năng sử dụng của ứng dụng của bạn không? – theGtknerd

Trả lời

0

tôi nhận được câu trả lời trên GTK App danh sách gửi thư dev mà đưa tôi đến với giải pháp:

Gắn TreeView để GTK Lưới mà sau đó sẽ được thêm vào ScrolledWindow giải quyết vấn đề này đối với tôi.

Thay vì điều này

scrolled_tree_view = gtk.ScrolledWindow() 
scrolled_tree_view.add(self._tree_view) 

bạn cần phải làm như sau

scrolled_tree_view = gtk.ScrolledWindow() 
grid = gtk.Grid() 
grid.attach(self._tree_view, 0, 0, 1, 1) 
scrolled_tree_view.add(grid) 

Thật không may, đây không phải là tài liệu bất cứ nơi nào.

Các vấn đề liên quan