2011-08-18 29 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不會收到它們,並且不會更改其大小。