端口打开问题Python、PySerial、PyQt

端口打开问题Python、PySerial、PyQt,python,pyqt,pyserial,rs485,Python,Pyqt,Pyserial,Rs485,我正在编写一个应用程序,允许我通过选定的串行端口(使用RS485)连接到设备。除了一件事,一切都很好。当按下按钮时,我的应用程序调用函数并打开连接,但一旦此函数完成所有操作,端口连接立即关闭。因此,当我以后要使用此连接时,我收到一个错误“未定义串行” 我希望我的连接被打开,因为当我关闭程序时,按钮被点击,这样我可以同时使用lineEdit(按下enter键后触发其他功能)向设备发送一些命令。你们能帮帮我吗 编辑: 好的,我用QThreads解决了这个问题。但我仍然不知道为什么如果我的程序的某个部

我正在编写一个应用程序,允许我通过选定的串行端口(使用RS485)连接到设备。除了一件事,一切都很好。当按下按钮时,我的应用程序调用函数并打开连接,但一旦此函数完成所有操作,端口连接立即关闭。因此,当我以后要使用此连接时,我收到一个错误“未定义串行”

我希望我的连接被打开,因为当我关闭程序时,按钮被点击,这样我可以同时使用lineEdit(按下enter键后触发其他功能)向设备发送一些命令。你们能帮帮我吗

编辑:
好的,我用QThreads解决了这个问题。但我仍然不知道为什么如果我的程序的某个部分使用串行端口,而另一个部分在打开端口的情况下却不能这样做(这是不可能的,因为一次只有一个“东西”可以连接到串行端口)。

使用ser.close()正确关闭串行端口吗?编辑:既然你正在使用PyQT,那么你应该考虑使用它提供的串行设备类。PySerial未处于活动开发afaik中。如果不保留对
Serial
对象的引用,则函数返回时它将被垃圾收集。因此,您需要执行类似于
self.ser=serial.serial(…)
的操作。(请注意:
currentText()
永远不会返回
None
,因此您的if语句当前是多余的。请改为测试空字符串)。
def open_connection(self):
    cur_item = self.comboBox.currentText()
    if (cur_item) is not None:
        fullname = self.full_port_name(str(cur_item))
        try:                                                                     
            ser = serial.Serial(
            port=fullname, 
            baudrate=115200, 
            parity=serial.PARITY_NONE,
            stopbits=serial.STOPBITS_ONE,
            bytesize=serial.EIGHTBITS,
            timeout=None)                                                

        except SerialException, e:
            QMessageBox.critical(self, 'Failure',
                'Failed to open %s:\n%s' % (cur_item, e))