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 都发生。

这是我的项目的代码:

https://pastebin.com/Si6gNfDZ

我尽我所能,将日志记录级别设置为 DEBUG(在我的代码中),使用 pdb 调试应用程序...没有有用的信息。

不是 Tk 从一个单独的线程访问的问题,或者 运行 在一个线程中的问题 – Tk 在主线程中运行,所有与线程的通信逻辑线程通过共享队列发生...

或者我遗漏了什么?提前致谢!

问题是 get_IP_data() 运行 在 Thread-1 而不是 MainThread,因为函数是从 Thread-1 中调用的,即使它驻留在在线程本身之外(就像 Python 的工作方式)...

解决方案是简单地在 MainThread 中调用 get_IP_data()。然而,让我感到困惑的是,为什么 urllib 会干扰 Ttkinter?但这不是重点,问题已解决。