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

Ker*_*itG 2 python tkinter

我正在Windows XP上开发一个Python 2.7.1/Tkinter 8.4应用程序,用于检查来自RS-232端口的几行输入.但是,如果没有输入到达,它将永远处于循环中.

我正在尝试在GUI上实现"放弃测试"按钮,但由于主线程忙于等待输入,所以每次检查是否按下按钮似乎都没有.我尝试过update_idletasks()和time.sleep(1)没有成功.

有什么建议?

Bry*_*ley 5

Tk是单线程的,因此如果主线程忙,GUI将冻结.一种解决方案是使用单独的线程来进行读取,因此当读取阻塞时,主线程可以继续.当您获得一行输入时,您可以将其推送到由主线程监视的队列中.

另一种方法是弄清楚如何在串行端口上进行非阻塞读取.如果有数据,请阅读.如果没有,返回主事件循环.然后,您需要配置事件循环以每隔几百毫秒左右轮询一次端口,具体取决于您的性能需求.