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?
Bạn có [MCVE] (https://stackoverflow.com/help/mcve) không? – theGtknerd
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
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