在我继承wx.Panel的类中,我有这个方法:
def KeyEventProcedure(self):
while True:
z = msvcrt.getch()
if ord(z) == 27:
self.OutputText("Stopping.")
self.program_stopped = True
print "IT'S WORKIIIIING"
在我的PanelClass的__init__
方法中,我有这个:
self.program_stopped = False
keyThread = Thread(target = self.KeyEventProcedure)
#keyThread.setDaemon(1) //I tried with and without this call, makes no difference
keyThread.start()
在我的应用程序的许多地方,我都有这个检查:
if self.program_stopped == True:
self.program_stopped = False
return
我知道我可以在KeyEventProcedure
方法中退出整个应用程序,但我不想退出应用程序,我只想将当前正在执行的函数转移到return
。但是,当我启动应用程序时,无论我按ESC
多少次,它都不会打印,并且当前正在执行的操作不会返回。
答案 0 :(得分:1)
如果你想做的就是捕捉按键,你应该只使用wxPython的内置功能。尝试绑定到wx.EVT_KEY_DOWN甚至是wx.EVT_CHAR,而不是使用这种仅限Windows的方法。请参阅以下内容:
此外,您不应该尝试直接从线程访问wxPython程序。如果需要从线程更新UI,则必须使用wxPython线程安全方法,例如wx.CallAfter或wx.PostEvent。有关其他信息,请参阅以下内容: