如何在Python繁忙时监控Tkinter按钮?

2 投票
1 回答
1036 浏览
提问于 2025-04-16 08:10

我正在开发一个在Windows XP上运行的Python 2.7.1和Tkinter 8.4的应用程序,这个程序会从RS-232端口检查几行输入。不过,如果没有输入到达,它就会一直在一个循环里等待,永远不会停止。

我想在图形界面上实现一个“放弃测试”的按钮,但因为主线程一直在忙着等待输入,所以它似乎没有时间去检查按钮是否被按下。我试过使用update_idletasks()和time.sleep(1),但都没有成功。

有没有什么建议呢?

1 个回答

5

Tk是单线程的,这意味着如果主线程忙着做其他事情,界面就会卡住。解决这个问题的一种方法是使用一个单独的线程来进行读取,这样当读取操作占用主线程时,主线程仍然可以继续工作。当你读取到一行输入时,可以把它放到一个队列里,主线程会监控这个队列。

另一种方法是想办法在你的串口上进行非阻塞读取。也就是说,如果有数据就读取,没有数据就返回到主事件循环。你需要设置事件循环,让它每隔几百毫秒检查一次你的串口,具体时间可以根据你的性能需求来调整。

撰写回答