Wxpython 关闭GUI时的挂起问题

Wxpython 关闭GUI时的挂起问题,wxpython,Wxpython,当我关闭我开发的GUI时,终端上(在Mac OS X Mavericks上)会有一些悬空,这与终端上几乎是瞬时终止的情况相反,从终端用户端关闭GUI时会出现这种情况。当它在终端中关闭时,出现以下消息: Checking Connection to Server... Connection Failed! Exception in thread Thread-3: Traceback (most recent call last): File "/Library/Framework

当我关闭我开发的GUI时,终端上(在Mac OS X Mavericks上)会有一些悬空,这与终端上几乎是瞬时终止的情况相反,从终端用户端关闭GUI时会出现这种情况。当它在终端中关闭时,出现以下消息:

Checking Connection to Server...
Connection Failed!
Exception in thread Thread-3:
Traceback (most recent call last):
  File       "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 810, in __bootstrap_inner
    self.run()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 1082, in run
    self.function(*self.args, **self.kwargs)
  File "sigd_tool_v20.py", line 1751, in CheckConnection
    self.connect.SetLabel("Not Connected!")
  File "/usr/local/lib/wxPython-3.0.0.0/lib/python2.7/site-packages/wx-3.0-osx_cocoa/wx/_core.py", line 16712, in __getattr__
raise PyDeadObjectError(self.attrStr % self._name)
PyDeadObjectError: The C++ part of the TestPanel object has been deleted, attribute access no longer allowed.

我在GUI中包含了一个名为
CheckConnection
的函数,它允许最终用户在使用GUI时查看他们是否仍然连接到我们的服务器。我怀疑这是由于不正确的线程,主要是因为终端指示的内容。我不明白为什么会出现
PyDeadObjectError
。对我有什么想法吗?提前谢谢你

线程可能正在直接访问GUI,这是您绝对不应该做的事情。只能使用wxPython的线程安全方法:wx.CallAfter和wx.PostEvent访问GUI

PyDeadObjectError意味着某些东西(可能是线程)正在试图在测试面板被销毁后访问它


关闭应用程序时,需要在关闭框架之前结束线程。这意味着您需要调用线程的join()方法,或者以其他方式终止它。完成后,您可以正常关闭框架。

Mike
,再次感谢您提供的解决方案。我一直在使用Rapin和Dunn的“WxPython in Action”进行调查,他们提到了您提到的线程安全方法。唯一不同的是,你的解释比他们的更明确,尽管它非常简洁。我向你致敬!很高兴我能帮忙。Dunn的书很好,尽管它已经有点旧了。或者他可以在构建它时将线程设置为守护进程。是的,但是如果他直接从线程访问UI,并且UI被破坏,那么他仍然会得到这个错误。