2

私は 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

4

0 に答える 0