Python使用Scrollbars制作gtk.Layout

时间:2011-08-18 18:58:35

标签: python dynamic gtk scrollbar

我怎么能在gtk.Layout中有一个滚动条。

例如,在我的代码中我有:

import pygtk
pygtk.require('2.0')
import gtk

class ScrolledWindowExample:
    def __init__(self):
        self.window = gtk.Dialog()
        self.window.connect("destroy", self.destroy)
        self.window.set_size_request(300, 300)

        self.scrolled_window = gtk.ScrolledWindow()
        self.scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)

        self.window.vbox.pack_start(self.scrolled_window, True, True, 0)

        self.layout = gtk.Layout()
        self.scrolled_window.add(self.layout)

        self.current_pos = 0
        self.add_buttom()
        self.window.show_all()

    def add_buttom(self, widget = None):
            title = str(self.current_pos)
            button = gtk.ToggleButton(title)
            button.connect_object("clicked", self.add_buttom, None)
            self.layout.put(button, self.current_pos, self.current_pos)
            button.show()
            self.current_pos += 20

    def destroy(self, widget):
        gtk.main_quit()

if __name__ == "__main__":
    ScrolledWindowExample()
    gtk.main()

我真正想要的是找到一些方法来使滚动动态。请参阅上面的示例,当您单击任何按钮时,将添加另一个按钮。但滚动条不起作用。

如何让滚动条工作?

1 个答案:

答案 0 :(得分:0)

如果您使用gtk.Window()代替gtk.Dialog(),它是否有效;或self.window.run()之后执行self.window.show_all()

Dialog和Common Window之间的区别在于Dialog有自己的循环来处理事件。由于您没有运行其run()命令,因此此循环永远不会有机会捕获事件,因此ScrolledWindow不接收它们,并且不会更改其大小。