Tcl_AsyncDelete Python 中的 Ubuntu 错误
Tcl_AsyncDelete error on Ubuntu in Python
我的 Python 应用程序在 Windows 和 OS X/macOS 上成功运行...在 Ubuntu 上,但是,我得到一个 Tcl_AsyncDelete错误!
我知道线程在 Python 中如何与 Tk 一起工作,并且 Tk 应该只能从主线程访问,但是当我的逻辑线程试图打开一个 URL 与 urllib.urlopen
,出现错误并出现 Python 恐慌。一旦我删除 urlopen
调用来测试它,程序就不会崩溃。 Python 2 和 Python 3 都发生。
这是我的项目的代码:
我尽我所能,将日志记录级别设置为 DEBUG(在我的代码中),使用 pdb 调试应用程序...没有有用的信息。
这不是 Tk 从一个单独的线程访问的问题,或者 运行 在一个线程中的问题 – Tk 在主线程中运行,所有与线程的通信逻辑线程通过共享队列发生...
或者我遗漏了什么?提前致谢!
问题是 get_IP_data()
运行 在 Thread-1
而不是 MainThread
,因为函数是从 Thread-1
中调用的,即使它驻留在在线程本身之外(就像 Python 的工作方式)...
解决方案是简单地在 MainThread
中调用 get_IP_data()
。然而,让我感到困惑的是,为什么 urllib
会干扰 Ttkinter
?但这不是重点,问题已解决。
我的 Python 应用程序在 Windows 和 OS X/macOS 上成功运行...在 Ubuntu 上,但是,我得到一个 Tcl_AsyncDelete错误!
我知道线程在 Python 中如何与 Tk 一起工作,并且 Tk 应该只能从主线程访问,但是当我的逻辑线程试图打开一个 URL 与 urllib.urlopen
,出现错误并出现 Python 恐慌。一旦我删除 urlopen
调用来测试它,程序就不会崩溃。 Python 2 和 Python 3 都发生。
这是我的项目的代码:
我尽我所能,将日志记录级别设置为 DEBUG(在我的代码中),使用 pdb 调试应用程序...没有有用的信息。
这不是 Tk 从一个单独的线程访问的问题,或者 运行 在一个线程中的问题 – Tk 在主线程中运行,所有与线程的通信逻辑线程通过共享队列发生...
或者我遗漏了什么?提前致谢!
问题是 get_IP_data()
运行 在 Thread-1
而不是 MainThread
,因为函数是从 Thread-1
中调用的,即使它驻留在在线程本身之外(就像 Python 的工作方式)...
解决方案是简单地在 MainThread
中调用 get_IP_data()
。然而,让我感到困惑的是,为什么 urllib
会干扰 Ttkinter
?但这不是重点,问题已解决。