这是 wxPython 程序的示例工作流程:编写一些代码,运行应用程序,注意我的边框大小偏离了几个像素,关闭程序,进行细微调整,重复直到看起来恰到好处。
这显然是低效的,而且我还有无数其他情况,我正在对界面进行细微调整,如果我不必关闭/重新打开我的程序十几次,这将容易得多。
我目前正在使用 IDLE,但对替代品持开放态度。有没有更好的办法?我已经在 wxPython Demo 应用程序中看到了它,您可以在其中更改代码并立即查看结果,但我不清楚它是如何完成的。
您可以使用 Python 的reload () 内置功能。这是一个有趣的小演示:
import testApp
import wx
########################################################################
class ReloaderPanel(wx.Panel):
""""""
#----------------------------------------------------------------------
def __init__(self, parent):
"""Constructor"""
wx.Panel.__init__(self, parent)
self.testFrame = None
showAppBtn = wx.Button(self, label="Show App")
showAppBtn.Bind(wx.EVT_BUTTON, self.onShowApp)
reloadBtn = wx.Button(self, label="Reload")
reloadBtn.Bind(wx.EVT_BUTTON, self.onReload)
mainSizer = wx.BoxSizer(wx.VERTICAL)
mainSizer.Add(showAppBtn, 0, wx.ALL|wx.CENTER, 5)
mainSizer.Add(reloadBtn, 0, wx.ALL|wx.CENTER, 5)
self.SetSizer(mainSizer)
#----------------------------------------------------------------------
def onReload(self, event):
"""
Reload the code!
"""
if self.testFrame:
self.testFrame.Close()
reload(testApp)
self.showApp()
else:
self.testFrame = None
#----------------------------------------------------------------------
def onShowApp(self, event):
"""
Show the app
"""
self.showApp()
#----------------------------------------------------------------------
def showApp(self):
"""
"""
self.testFrame = testApp.TestFrame()
########################################################################
class ReloaderFrame(wx.Frame):
""""""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, None, title="Reloader")
panel = ReloaderPanel(self)
self.Show()
if __name__ == "__main__":
app = wx.App(False)
frame = ReloaderFrame()
app.MainLoop()
这是您可以编辑的 testApp 脚本:
import wx
########################################################################
class TestPanel(wx.Panel):
""""""
#----------------------------------------------------------------------
def __init__(self, parent):
"""Constructor"""
wx.Panel.__init__(self, parent)
########################################################################
class TestFrame(wx.Frame):
""""""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, None, title="Test program")
panel = TestPanel(self)
self.Show()
if __name__ == "__main__":
app = wx.App(False)
frame = TestFrame()
app.MainLoop()
确保将第二个保存为testApp.py。现在,如果您编辑第二个脚本并点击第一个脚本中的重新加载按钮,您将看到您的更改。