我正在使用PyGTK进行原型设计GUI布局,有时候使用glade / builder没有,并且以下场景无休止地重复:
所以,既然我听说Python允许重新加载模块,我想知道是否可以在不关闭窗口的情况下修改代码,然后从窗口本身,例如,点击按钮,“重新加载“窗口反映了代码的变化。
由于这是一个概念性问题,我没有任何特定的代码可供展示。
感谢您的关注
答案 0 :(得分:1)
我认为如果您执行以下操作是可能的:
当然,这里的关键步骤是“重新加载模块”。我想你必须确保没有来自模块的代码正在运行,并且没有其他模块依赖于在该模块上定义的变量。
编辑:我有一段时间,所以我制作了一个原型。更改widget_module.py中的标签,然后点击Updategui.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")