wxPython在导入子包时启动我的应用两次

2024-05-29 00:03:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我很抱歉口头描述。在

我在一个名为applicationwindow.py的文件中有一个wxPython应用程序,它位于一个名为garlicsimwx的包中。当我通过启动上述文件启动应用程序时,一切都很好。但是,我在一个文件夹中创建了一个文件rundemo.py,该文件夹包含garlicsimwx包,该包也运行该应用程序。但是,当我使用rundemo.py时,当主wx.Frame导入garlicsimwx的子包,即simulations.life时,由于某种原因,我的应用程序的一个新实例被创建(即,弹出一个新的相同窗口)

我已经试着一个接一个地逐步执行这些命令,尽管只有在导入子包之后才会出现错误,import语句并没有直接导致它。只有当控件返回PyApp.MainLoop时,第二个窗口才会打开。在

我该怎么阻止这一切?在


Tags: 文件实例py命令文件夹应用程序wxpythonframe
3条回答

明白了:没有

if __name__=='__main__':

在我的rundemo文件中。这实际上是一个multiprocessing问题:新窗口是在单独的进程中打开的。在

我想你的某个模块中有这样的代码:

import wx

class MyFrame(wx.Frame):
    def __init__(...):
       ...

frame = MyFrame(...)

第一次导入此模块时将创建框架。要防止这种情况发生,请使用常见的Python习惯用法:

^{pr2}$

我猜对了吗?在

您可以创建一个像g_window_was_drawn这样的全局布尔变量,并在创建窗口的函数中检查它。该值在程序开始时为false,在第一次创建窗口时将变为True。创建窗口的函数将检查g_window_was_drawn是否已经为真,如果是,它将抛出异常。然后您将得到一个很好的stacktrace,告诉您谁负责执行这个函数。在

我希望这能帮你找到它。很抱歉口头解决;)

相关问题 更多 >

    热门问题