"Resizing for ..." GTK warning when using Gtk.TreeView inside Gtk.ScrolledWindow

In the GTK 3 app, I get the following warnings:

Gtk-WARNING **: __main__+MCVEWindow 0000000004e93b30 size __main__+MCVEWindow 0000000004e93b30 without calling gtk_widget_get_preferred_width / height (). How does the code know the size to place?

Warnings occur when a Gtk.ScrolledWindow containing Gtk.TreeView attaches to a grid, the grid itself is bound to gtk.ApplicationWindow , and there are enough elements on the scroll bar to actually display the scroll bar. If there are not enough elements to scroll through it, a warning does not appear.

 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() 

You should be able to copy, paste and run this code if you have an environment installed.

Alerts do not correspond to any particular scheme, sometimes there is one warning, sometimes two or more. Warrnings also appear when I expand all elements of the tree.

GTK Version 3.22.18

What can cause these warnings?

+8
python gtk pygobject gtk3
source share
1 answer

I got a response on the GTK App dev mailing list that led me to a solution:

Attaching the TreeView to the GTK grid, which is then added to ScrolledWindow, solved the problem for me.

Instead of this

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

you need to do the following

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

Unfortunately, this is not documented anywhere.

+1
source share

All Articles