我很抱歉口头描述。
我在名为applicationwindow.py
的文件中有一个wxPython应用程序,该文件位于名为garlicsimwx
的程序包中。当我通过启动上述文件启动应用程序时,一切正常。但是,我在包含rundemo.py
包的文件夹中创建了一个文件garlicsimwx
,该包也运行该应用程序。当我使用rundemo.py
时,应用会启动,当主wx.Frame
导入garlicsimwx
的子包,即simulations.life
时,出于某种原因我的新实例应用程序已创建(即弹出一个新的相同窗口。)
我已经尝试逐个单步执行命令,尽管只在导入子包之后才会发生错误,但import
语句并不直接导致它。只有当控件返回PyApp.MainLoop
时,才会打开第二个窗口。
如何阻止此事?
答案 0 :(得分:4)
我认为你的一个模块中的代码看起来像这样:
import wx
class MyFrame(wx.Frame):
def __init__(...):
...
frame = MyFrame(...)
首次导入此模块时将创建框架。为了防止这种情况,请使用常见的Python习语:
import wx
class MyFrame(wx.Frame):
def __init__(...):
...
if __name__ == '__main__':
frame = MyFrame(...)
我猜对了吗?
答案 1 :(得分:0)
您可以创建一个像g_window_was_drawn
这样的全局布尔变量,并在执行创建窗口工作的函数中进行检查。在程序开始时该值为false,并在首次创建窗口时更改为True。创建窗口的函数将检查g_window_was_drawn
是否已经为真,如果是,则会抛出异常。那么你将有一个很好的堆栈跟踪告诉你谁负责执行这个功能。
我希望能帮到你找到它。我很抱歉口头解决方案;)
答案 2 :(得分:0)
知道了:没有
if __name__=='__main__':
在我的rundemo
文件中。这实际上是一个multiprocessing
问题:新窗口是在一个单独的过程中打开的。