我正在Windows XP上开发一个Python 2.7.1 / Tkinter 8.4应用程序,用于检查来自RS-232端口的几行输入。但是,如果没有输入到达,它将永远处于循环中。
我正在尝试在GUI上实现“放弃测试”按钮,但由于主线程忙于等待输入,所以每次检查是否按下按钮都不会出现。 我尝试过update_idletasks()和time.sleep(1)没有成功。
有什么建议吗?
答案 0 :(得分:5)
Tk是单线程的,因此如果主线程忙,GUI将冻结。一种解决方案是使用单独的线程来进行读取,因此当读取阻塞时,主线程可以继续。当您获得一行输入时,您可以将其推送到由主线程监视的队列中。
另一种方法是弄清楚如何在串口上进行非阻塞读取。如果有数据,请阅读。如果没有,返回主事件循环。然后,您需要配置事件循环以每隔几百毫秒左右轮询您的端口,具体取决于您的性能需求。