在PyQt GUI循环之外实现串行代码有问题吗? (读串口)?

时间:2019-06-10 21:29:39

标签: python events pyqt serial-port

我正在尝试使用PyQt编写一个程序(主要是为了我的实践),该程序将侦听串行端口并读出任何数据流。

我已经使用Tkinter已有一段时间了,但是PyQt5是完全不同的野兽。

我遇到了一个循环问题,该循环将识别串行端口在缓冲区中是否有任何消息,然后相应地更新GUI,因为串行问题可以说不是GUI事件。

我试图通过有一个单独的线程来解决这个问题,该线程将检查串行端口上是否有东西,但是似乎出现一个错误,告诉我无法使用单独的函数更新GUI线程。

https://pastebin.com/HK1Frh5g

    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似乎与众不同,我想知道是否可以找到一些指导。谢谢!

0 个答案:

没有答案