Какая польза от класса wx.App
(кроме того, что говорит документация), когда вы можете просто создать фрейм и .Show(True)
?
Когда должен использоваться класс wx.App
или почему вы не должны создавать фрейм и просто показывать его?
Вы должны создать 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 делает кучу за кулисами, чтобы заставить ваше приложение работать. Он выполняет основной цикл, который ждет пользователя, чтобы что-то сделать, а затем отвечает. Вы должны это иметь. Как упоминал FogleBird. Кстати, у вас НЕ должно быть больше одного. Это приведет к возникновению странных проблем, если они вообще будут работать.
Подклассификация 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