我正在尝试使用PyQt编写一个程序(主要是为了我的实践),该程序将侦听串行端口并读出任何数据流。
我已经使用Tkinter已有一段时间了,但是PyQt5是完全不同的野兽。
我遇到了一个循环问题,该循环将识别串行端口在缓冲区中是否有任何消息,然后相应地更新GUI,因为串行问题可以说不是GUI事件。
我试图通过有一个单独的线程来解决这个问题,该线程将检查串行端口上是否有东西,但是似乎出现一个错误,告诉我无法使用单独的函数更新GUI线程。
def find_port(self):
if self.is_connected is False:
self.is_connected = True
else:
self.is_connected = False
for port in serial.tools.list_ports.comports():
if port.vid == 5824 and port.pid == 1155:
self.ser.port = str(port.device)
self.port_found = True
print("Found")
if self.port_found is False:
print("Not found")
x = threading.Thread(target=self.talk_module)
x.start()
def talk_module(self):
self.ser.open()
while self.is_connected is True:
fd_line = self.ser.readline().decode()
print(fd_line)
self.table_widget.add_row(fd_line)
self.ser.close()
到目前为止,这是我的代码的链接。也是显示线程的代码片段。该功能有效,但我无法更新GUI
基本上,我希望能够按一个按钮或一个对话框,并从串行端口读取直到我按另一个按钮。
使用Tkinter,我能够使用一种方法来更新GUI,并且在我自己的函数中发生了事情。
PyQt似乎与众不同,我想知道是否可以找到一些指导。谢谢!