从QThread获取GUI元素值



QThread如何从QLineEdit获取文本?

我尝试self.t.updateSignal.connect(self.inputedittext.text)获得QLineEdit值,但我得到一个错误:

TypeError:不支持+=的操作数类型:PyQt4.QtCore。pyqtBoundSignal'和'int'

或者我得到消息:

0x02624580处xxxxxx的绑定信号updateSignal

代码:

import sys
import time
from PyQt4 import QtGui, QtCore
class mc(QtGui.QWidget):
    def __init__(self):
        super(mc,self).__init__()
        self.initUI()
    def initUI(self):
        self.setWindowTitle('QThread')
        self.inputedittext = QtGui.QLineEdit()
        self.startbutton = QtGui.QPushButton('start')
        self.stopbutton = QtGui.QPushButton('stop')
        self.textlable = QtGui.QLabel('0')
        lv1 = QtGui.QVBoxLayout()
        lb1 = QtGui.QHBoxLayout()
        lb1.addWidget(self.inputedittext)
        lb1.addWidget(self.startbutton)
        lb1.addWidget(self.stopbutton)
        lb2 = QtGui.QHBoxLayout()
        lb2.addWidget(self.textlable)
        lv1.addLayout(lb1)
        lv1.addLayout(lb2)
        self.setLayout(lv1)
        self.t = test_QThread()
        self.t.updateSignal.connect(self.inputedittext.text)
        self.startbutton.clicked.connect(self.start_t)
        self.connect(self.t,QtCore.SIGNAL('ri'),self.setlable)
    def setlable(self,i):
        self.textlable.setText(i)
    def start_t(self):
        self.t.start()
        # print(self.inputedittext.text())

class test_QThread(QtCore.QThread):
    updateSignal = QtCore.pyqtSignal(QtCore.QString)
    def __init__(self):
        QtCore.QThread.__init__(self)
    def run(self):
        i = self.updateSignal
        # i=0
        go = True
        while go:
            i+=1
            time.sleep(1)
            self.emit(QtCore.SIGNAL('ri'),str(i))
            print('run...')


def main():
    app = QtGui.QApplication(sys.argv)
    mw = mc()
    mw.show()
    app.exec_()
if __name__ == '__main__':
    main()

使用信号从线程到gui,从gui到线程进行通信:

class mc(QtGui.QWidget):
    ...
    def initUI(self):
        ...
        self.t = test_QThread()
        self.t.progressSignal.connect(self.setlable)
        self.t.requestSignal.connect(self.sendText)
        self.startbutton.clicked.connect(self.start_t)
        self.stopbutton.clicked.connect(self.stop_t)
    def sendText(self):
        self.t.updateSignal.emit(self.inputedittext.text())
    def setlable(self, i):
        self.textlable.setText(str(i))
    def start_t(self):
        self.t.start()
    def stop_t(self):
        self.t.stop()

class test_QThread(QtCore.QThread):
    requestSignal = QtCore.pyqtSignal()
    updateSignal = QtCore.pyqtSignal(str)
    progressSignal = QtCore.pyqtSignal(int)
    def __init__(self, parent=None):
        super(test_QThread, self).__init__(parent)
        self.updateSignal.connect(self.updateSlot)
        self._running = False
        self._count = 0
    def updateSlot(self, text):
        print 'received: "%s", count: %d' % (text, self._count)
    def stop(self):
        self._running = False
    def run(self):
        self._count = 0
        self._running = True
        while self._running:
            self._count += 1
            time.sleep(1)
            self.progressSignal.emit(self._count)
            if self._count % 3 == 0:
                self.requestSignal.emit()

最新更新