0

gtk.Table の奇妙な動作に気付きました。このコードを実行してみてください:

import gtk

class Scrollbar:
    def __init__(self):
        window = gtk.Window()
        window.set_default_size(200, 200)

        button1 = gtk.Button("Button 1")
        button2 = gtk.Button("Button 2")

        table = gtk.Table(20, 20)
        for i in xrange(20):
            for j in range(20):
                table.attach(gtk.Label("%d, %d" % (i, j)), i, i+1, j, j+1, 
                    gtk.FILL | gtk.SHRINK, gtk.FILL | gtk.SHRINK)

        viewport = gtk.Viewport()
        viewport.add(table)

        vadjust = viewport.get_vadjustment()
        hadjust = viewport.get_hadjustment()        

        vscroll = gtk.VScrollbar(vadjust)
        hscroll = gtk.HScrollbar(hadjust)

        superTable = gtk.Table(2, 2, False)
        superTable.attach(viewport, 0, 1, 0, 1, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND)
        superTable.attach(vscroll, 1, 2, 0, 1, gtk.FILL | gtk.SHRINK, gtk.FILL | gtk.SHRINK)
        superTable.attach(hscroll, 0, 1, 1, 2, gtk.FILL | gtk.SHRINK, gtk.FILL | gtk.SHRINK)

        window.add(superTable)

        window.connect("destroy", lambda w: gtk.main_quit())
        window.show_all()

Scrollbar()
gtk.main()

これを試してみると、ウィンドウの最小サイズは、スクロールせずにテーブル全体を収容するのに十分な大きさになり、大きなテーブルでは実用的ではなくなります。ScrolledWindow を使用すると、これは起こりません。なんで?(この質問は、ScrolledWindow だけを使用できない、より複雑なスクロール動作を持つアプリケーションに関係しています)

4

1 に答える 1

1

テーブルがビューポート サイズよりも大きくなった場合にスクロールを有効にする viewport.set_size_request(x, y) を追加できます。

于 2012-12-06T12:19:22.040 に答える