【问题标题】:purpose of wx.App when just showing a frame is enoughwx.App 的目的只显示一个框架就足够了
【发布时间】:2012-01-12 13:17:03
【问题描述】:

wx.App 类有什么用(除了文档说的),当你可以创建一个框架和.Show(True) 它时?

什么时候应该使用wx.App 类,或者为什么不创建一个框架并直接显示它?

【问题讨论】:

    标签: python wxpython wxwidgets


    【解决方案1】:

    创建一个 wx.App。如果您在创建应用程序之前尝试实例化 wxPython 类,它将失败:

    >>> import wx
    >>> frame = wx.Frame(None)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_windows.py", line 505, in __init__
        _windows_.Frame_swiginit(self,_windows_.new_Frame(*args, **kwargs))
    wx._core.PyNoAppError: The wx.App object must be created first!
    

    永远只有一个,而且只有一个,wx.App。实例化它会初始化 wxPython - 创建窗口线程等。

    【讨论】:

    • 啊...似乎我使用的环境已经创建了一个 wx.App 类,因此当我尝试自己创建一个类时会出现奇怪的行为,以及它如何在不实例化的情况下更好地工作。会记得先在纯python上测试东西!谢谢!
    【解决方案2】:

    wx.App 做了很多幕后工作以使您的应用程序正常工作。它执行主循环,即等待用户做某事然后响应。你必须拥有它。正如 FogleBird 所提到的。顺便说一句,你不应该有多个。这样做会导致奇怪的问题,如果它有效的话。

    【讨论】:

    • 似乎它可以创建多个,我只是不知道已经创建了一个。但这肯定会让奇怪的事情发生!包括未捕获 EVT_CLOSE 和线程未正确终止...
    • 哦,您可以创建多个,但您的应用肯定无法正常工作。我想我的措辞很糟糕。对此感到抱歉。
    【解决方案3】:

    当您必须在应用程序中执行一些额外功能时,子类化 wx.App 是一个正当理由。这适用于启动与数据库的连接或通过网络连接,在启动主程序之前加载一些外部数据/文件。

    class MyApp(wx.App):
        def OnInit(self):
            # Do some work here
            return True
        def __init__(self):
            main_frame = MyFrame(*args, **kwargs)
            main_frame.Show()
        def OnExit(self):
            # Clean up and close the resources from the OnInit() method
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 2014-11-27
      • 2010-09-23
      • 2019-01-02
      • 2011-01-05
      相关资源
      最近更新 更多