1

这是 wxPython 程序的示例工作流程:编写一些代码,运行应用程序,注意我的边框大小偏离了几个像素,关闭程序,进行细微调整,重复直到看起来恰到好处。

这显然是低效的,而且我还有无数其他情况,我正在对界面进行细微调整,如果我不必关闭/重新打开我的程序十几次,这将容易得多。

我目前正在使用 IDLE,但对替代品持开放态度。有没有更好的办法?我已经在 wxPython Demo 应用程序中看到了它,您可以在其中更改代码并立即查看结果,但我不清楚它是如何完成的。

4

1 回答 1

3

您可以使用 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。现在,如果您编辑第二个脚本并点击第一个脚本中的重新加载按钮,您将看到您的更改。

于 2013-08-01T15:15:47.087 回答