Otrzymuję następujące ostrzeżenia w mojej aplikacji GTK 3:"Przydzielanie rozmiar do ..." GTK Warning podczas korzystania Gtk.TreeView wewnątrz Gtk.ScrolledWindow
Gtk-WARNING **: wielkość podziału
__main__+MCVEWindow 0000000004e93b30
bez wywoływania funkcji gtk_widget_get_preferred_width/height(). W jaki sposób kod zna rozmiar do przydzielenia?
Ostrzeżenia występuje, gdy Gtk.ScrolledWindow
zawierający Gtk.TreeView
jest przyłączony do sieci, sama siatka jest przymocowana do gtk.ApplicationWindow
i istnieje wystarczająco dużo elementów do przewijania, aby rzeczywiście pojawią. Jeśli nie ma wystarczającej liczby elementów, aby przewinąć, ostrzeżenie nie pojawia się.
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()
Powinieneś być w stanie skopiować, wkleić i uruchomić ten kod, jeśli masz skonfigurowane środowisko.
Ostrzeżenia nie mają określonego wzorca, czasami jest jedno ostrzeżenie, czasami dwa lub więcej. Ostrzeżenia pojawiają się również po rozwinięciu wszystkich elementów drzewa.
wersja GTK jest 3.22.18
Co mogło spowodować te ostrzeżenia?
Czy masz [MCVE] (https://stackoverflow.com/help/mcve)? – theGtknerd
Tak, zredagowałem pytanie. Powinieneś być w stanie go uruchomić, jeśli masz skonfigurowane środowisko. – Doom8890
Niestety, nie mogę utworzyć tego błędu za pomocą Gtk 3.18. Czy wpływają one na użyteczność twojej aplikacji? – theGtknerd