Python 创建带滚动条的gtk.Layout
我该如何在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
如果你用 gtk.Window()
代替 gtk.Dialog()
,或者在 self.window.show_all()
之后执行 self.window.run()
,这样做有效吗?
对话框(Dialog)和普通窗口(Window)之间的区别在于,对话框有自己的循环来处理事件。因为你没有运行它的 run()
命令,这个循环就没有机会去捕捉事件,所以 ScrolledWindow
收不到这些事件,也就无法改变它的大小。