У вас все еще есть проблемы.
- Gui не будет отображаться до тех пор, пока не запустится
MainLoop
, поэтому команда sleep
находится не в том месте, и если вы поставите ее после MainLoop
, она не будет активирована, пока Gui не вернется при закрытии то есть MainLoop
заканчивается.
- Определение
wx.App
все еще не в обычном месте, и где оно
есть, он все равно должен быть объявлен как self.app
и по-прежнему должен называться frame.app
.
- Поскольку вы, вероятно, новичок в wxpython, вы не используете
sizers
для позиционирования виджета, поэтому вы должны назначить каждому виджету хотя бы позицию, если не размер (они попытаются измерить себя).
Попробуйте код ниже и обратите внимание на различия.
import sys, random, string, base64,time, calendar, io, threading, wx
try:
#Python 2.7
import thread
except ImportError:
#python 3.xx
import _thread as thread
class gameUI(wx.Frame):
def __init__(self,parent,title):
self._rows = 0
self._columns = 0
self._user = None
wx.Frame.__init__(self, None, wx.ID_ANY, "Button Tutorial")
panel = wx.Panel(self, wx.ID_ANY)
button = wx.Button(panel, id=wx.ID_ANY, label="Press Me", pos=(20,20), size=(80,25))
quit = wx.Button(panel, id=wx.ID_ANY, label="Quit", pos=(20,50), size=(80,25))
button.Bind(wx.EVT_BUTTON, self.onButton)
quit.Bind(wx.EVT_BUTTON, self.onQuit)
def onButton(self, event):
"""
This method is fired when its corresponding button is pressed
"""
print ("Button pressed!")
def onQuit(self, event):
self.Destroy()
def main():
try:
app = wx.App()
frame = gameUI(None, title='Simple application')
frame.Show()
app.MainLoop()
finally:
del app
if __name__ == '__main__':
main()