Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.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/5/url/2.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 使用PyQt的带线程终端_Python_Pyqt_Pyqt4_Pyserial - Fatal编程技术网

Python 使用PyQt的带线程终端

Python 使用PyQt的带线程终端,python,pyqt,pyqt4,pyserial,Python,Pyqt,Pyqt4,Pyserial,我正在尝试构建一个PyQt应用程序,它(除其他外)能够通过QTextEdit框像串行终端程序(HyperTerminal、TeraTerm等)一样运行。我已经阅读了PySerial页面中的一些示例,我认为我已经成功地使接收数据线程正常工作,但可能没有尽可能高效 我的问题是如何获取QTextEdit框中最后键入的字符并将其发送到串行连接?我尝试使用QTextEdit发出的textChanged信号,但它会发送我键入的所有内容和它接收到的所有内容。我已经尝试在我的主GUI类中设置eventFilte

我正在尝试构建一个PyQt应用程序,它(除其他外)能够通过QTextEdit框像串行终端程序(HyperTerminal、TeraTerm等)一样运行。我已经阅读了PySerial页面中的一些示例,我认为我已经成功地使接收数据线程正常工作,但可能没有尽可能高效

我的问题是如何获取QTextEdit框中最后键入的字符并将其发送到串行连接?我尝试使用QTextEdit发出的textChanged信号,但它会发送我键入的所有内容和它接收到的所有内容。我已经尝试在我的主GUI类中设置eventFilter,但我不知道如何将它转移到另一个文件中的串行函数。我是否希望有一个单独的线程侦听eventFilter发出的信号?我该怎么做?有没有更优雅的方法

我确信我已经想得太多了,解决办法很简单,但我还是有些挣扎。我将附加相关的代码片段(不是完整的代码集),也许有人可以为我指出正确的方向。如果有人也认为我正在做的线程可以以更有效的方式完成,那么请转告我

谢谢任何人能提供的帮助

主文件:

import sys
from PyQt4 import QtGui
from MainGUI import TestGUI
from SerialClasses import *
from SerialMiniterm import *

class StartMainWindow(QtGui.QMainWindow):      
    def __init__(self, parent=None):
        super(StartMainWindow, self).__init__(parent)
        self.ui = TestGUI()
        self.ui.setupUi(self)    
        self.ui.serialTextEditBox.installEventFilter(self)

    def eventFilter(self, source, event):
        if (event.type() == QtCore.QEvent.KeyPress and source is self.ui.serialTextEditBox):
            # print some debug statements to console
            if (event.key() == QtCore.Qt.Key_Tab):
                print ('Tab pressed')
            print ('key pressed: %s' % event.text())
            print ('code pressed: %d' % event.key())
            # do i emit a signal here?  how do i catch it in thread?
            self.emit(QtCore.SIGNAL('transmitSerialData(QString)'), event.key())
            return True
        return QtGui.QTextEdit.eventFilter(self, source, event)   

    def serialConnectCallback(self):
        self.miniterm = SerialMiniterm(self.ui, self.SerialSettings)
        self.miniterm.start()
        temp = self.SerialSettings.Port + 1
        self.ui.serialLabel.setText("<font color = green>Serial Terminal Connected on COM%d" % temp) 

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    app.setStyle("Cleanlooks")
    myapp = StartMainWindow()
    myapp.show()
    sys.exit(app.exec_())
像这样的

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

class Terminal(QtGui.QPlainTextEdit):
    def keyPressEvent(self, event):
        print event.text()
        return QtGui.QPlainTextEdit.keyPressEvent(self, event)

term = Terminal()
term.show()
from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

class Terminal(QtGui.QPlainTextEdit):
    def keyPressEvent(self, event):
        print event.text()
        return QtGui.QPlainTextEdit.keyPressEvent(self, event)

term = Terminal()
term.show()