私は Gtk.Grid を持っていますが、ウィンドウのサイズを変更した後は更新されません (イベント列とすべてが正しく設定されています) が、再度サイズを変更するかアイテムをクリックすると再描画されます。
Gtk.main_iteration() は python3 で segfault を引き起こします
from gi.repository import GLib, Gtk
class Grid(Gtk.Grid):
min_width = 400
min_height = 300
min_spacing = 20
def __init__(self):
Gtk.Grid.__init__(self, name='feed_grid',
row_spacing=20, column_spacing=20)
self.set_column_homogeneous(True)
self.set_size_request(self.min_width, self.min_height)
self.connect('size-allocate', self._on_size_allocate)
self._cols = 2
def _on_size_allocate(self, widget, allocation):
self.set_width(allocation.width)
def set_width(self, width):
self._cols = (width + self.min_spacing) // self.min_width
self._rebuild_grid()
def get_columns(self):
return self._cols
def add_feed(self, feed):
feed.set_order(len(self.get_children()))
self._attach_feed(feed)
feed.show_all()
def _rebuild_grid(self):
for feed in self.get_children():
self.remove(feed)
self._attach_feed(feed)
def _attach_feed(self, feed):
y, x = divmod(feed.get_order(), self.get_columns())
self.attach(feed, x, y, 1, 1)
バグレポート https://bugs.launchpad.net/ubuntu/+source/gtk+3.0/+bug/987565
ビデオ https://launchpadlibrarian.net/102937139/floaty%20resize.ogv