Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么时候需要在GUI中使用串行通信线程?_Python_Python 2.7_Tkinter_Python Multithreading_Pyserial - Fatal编程技术网

Python 什么时候需要在GUI中使用串行通信线程?

Python 什么时候需要在GUI中使用串行通信线程?,python,python-2.7,tkinter,python-multithreading,pyserial,Python,Python 2.7,Tkinter,Python Multithreading,Pyserial,我正在使用Python2.7和Tkinter模块编写一个简单的GUI。GUI需要通过串行方式与两个单独的设备进行接口,因此我将使用Pyserial 我将打开两个串行端口,但为了保持GUI的响应性,我考虑使用多个线程来处理GUI和两个设备之间的任何串行来回。我想知道其他人是否会建议这样做,或者是否有其他方法 我的程序将出现一些情况 1) GUI仅在向设备发送命令后,才会期望设备做出一个或多个响应 2) GUI将从一个设备接收一个或多个响应,而不进行提示或预期 对于第一种情况,有两种方式可以将命令发

我正在使用Python2.7和Tkinter模块编写一个简单的GUI。GUI需要通过串行方式与两个单独的设备进行接口,因此我将使用Pyserial

我将打开两个串行端口,但为了保持GUI的响应性,我考虑使用多个线程来处理GUI和两个设备之间的任何串行来回。我想知道其他人是否会建议这样做,或者是否有其他方法

我的程序将出现一些情况

1) GUI仅在向设备发送命令后,才会期望设备做出一个或多个响应

2) GUI将从一个设备接收一个或多个响应,而不进行提示或预期

对于第一种情况,有两种方式可以将命令发送到GUI将查找响应的设备

1) 用户将键入一行并点击send。然后设备将做出响应。我想以这样的速度,如果这一切都在进行的话,就可以不穿线了

2) GUI将输入一个函数,该函数将逐行读取文本文件,每行表示要发送到设备的命令。函数仅在收到设备的确认响应时发送下一行。由于此函数只有在到达EOF、用户暂停或用户强制退出函数时才会结束,因此函数需要很长时间才能完成,GUI在运行时会冻结。我觉得这应该是在它自己的线程,以避免冻结

如果我觉得在程序中,来自设备的非预期响应将是一个常见事件,或者我不希望任何GUI无响应,那么我可以设计一个函数,线程将注意它所做的一切就是检查响应。我认为一个线程可以处理从多个设备寻找响应的问题。该函数还将有一个检查值,该检查值将从用户可控制的函数中返回,这也将关闭线程

第二个线程将处理运行函数,该函数逐行向设备发送命令。该函数可以向一个设备或另一个设备发送一些命令行。如果我可以打开两个线程,那么让这两个线程都检查serial.readline是否为true是否不好


如果您有任何意见,我将不胜感激。谢谢。

您可以每隔100毫秒使用root.after轮询设备。尽管声称tkinter不是“线程安全的”,但您应该能够从子线程更改显示的值。确切答案取决于“串行端口”的含义以及设备的确切握手和定时特性。实验,写一些代码,当你有问题时,发布一个最小的例子,错误和一个特定的问题。我支持Terry所说的。使用.after定期安排任务,以使用串行端口的数据更新GUI。