我認爲這是可能的,如果你做到以下幾點:
- 鑑別和分離,你希望看到更新的,當你按下按鈕(如果你想要的部件w查看整個窗口更新,然後將其添加到窗口中,而不是窗口本身)。
- 寫一個函數(或類)創建並返回此微
- 將一個模塊中此功能或類,你會重新
- W外側創建按鈕,並將其連接到執行以下 功能
- 從窗口
- 重新加載模塊刪除當前W¯¯
- 創建W的
- 將它添加到窗口新實例
當然,這裏的關鍵步驟是「重新加載模塊」。我想你必須確保模塊中沒有代碼正在運行,並且沒有其他模塊依賴於此模塊中定義的變量。
編輯:我有一些時間,所以我做了一個小原型。更改widget_module.py標籤,然後點擊更新
gui.py
# Load in pygtk and gtk
import pygtk
pygtk.require('2.0')
import gtk
import widget_module
# Define the main window
class Whc:
def __init__(self):
# Window and framework
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect("destroy", self.destroy)
# A Button, with an action
# Add it to the geometry
# show the button
self.button = gtk.Button("Update")
self.button.connect("clicked", self.update, None)
self.vbox = gtk.VBox()
self.vbox.pack_start(self.button)
self.widget = widget_module.get_widget()
self.vbox.pack_start(self.widget)
self.window.add(self.vbox)
# Show the window
self.window.show_all()
# Callback function for use when the button is pressed
def update(self, widget, data=None):
print "Update"
self.vbox.remove(self.widget)
reload(widget_module)
self.widget = widget_module.get_widget()
self.vbox.pack_start(self.widget)
self.widget.show()
# Destroy method causes appliaction to exit
# when main window closed
def destroy(self, widget, data=None):
gtk.main_quit()
# All PyGTK applicatons need a main method - event loop
def main(self):
gtk.main()
if __name__ == "__main__":
base = Whc()
base.main()
widget_module.py
import pygtk
import gtk
def get_widget():
return gtk.Label("hello")
大,容,你的答案是非常有益的。我一直在考慮銷燬整個窗口,但由於小部件樹總是嵌套在某個「最上層」小部件內部,所以淨效應應該是相同的,甚至更好。再次感謝! – heltonbiker 2011-02-07 18:17:03