2011-08-18 26 views
0

我怎样才能有一个gtk.Layout内的滚动条。Python制作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() 

我真正想要的是找到一些方法,使滚动动态。看到我上面的例子,当你点击任何按钮时,会添加另一个按钮。但滚动条不起作用。

我能做些什么来获得滚动条的工作?

回答

0

如果您使用gtk.Window()而不是gtk.Dialog(),它会起作用吗?或在self.window.show_all()后执行self.window.run()

对话框和普通窗口的区别在于对话框有自己的循环来处理事件。由于您没有运行run()命令,因此该循环从未获得捕获事件的机会,因此ScrolledWindow不会收到它们,并且不会更改其大小。