如何实时修改我的wxPython代码以避免关闭/重新打开它们?

时间:2013-08-01 14:48:27

标签: python wxpython

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

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

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

1 个答案:

答案 0 :(得分: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 。现在,如果您编辑第二个脚本并点击第一个脚本中的“重新加载”按钮,您将看到更改。