wxPython应用程序在所有线程上都没有响应?

时间:2014-07-07 12:43:41

标签: python multithreading wxpython

在我继承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多少次,它都不会打印,并且当前正在执行的操作不会返回。

1 个答案:

答案 0 :(得分:1)

如果你想做的就是捕捉按键,你应该只使用wxPython的内置功能。尝试绑定到wx.EVT_KEY_DOWN甚至是wx.EVT_CHAR,而不是使用这种仅限Windows的方法。请参阅以下内容:

此外,您不应该尝试直接从线程访问wxPython程序。如果需要从线程更新UI,则必须使用wxPython线程安全方法,例如wx.CallAfter或wx.PostEvent。有关其他信息,请参阅以下内容: