Python 创建带滚动条的gtk.Layout

0 投票
1 回答
849 浏览
提问于 2025-04-16 23:54

我该如何在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 收不到这些事件,也就无法改变它的大小。

撰写回答