在文本编辑框中每隔几秒添加一行文本。
1 #!/usr/bin/python3 2 # -*- coding:utf-8 -*- 3 4 import sys 5 import time 6 from PyQt5.QtWidgets import (QApplication, 7 QWidget, 8 QLineEdit, 9 QPushButton, 10 QTextEdit, 11 QGridLayout) 12 from PyQt5.QtCore import (Qt, 13 QThread, 14 pyqtSignal) 15 16 17 class Window(QWidget): 18 def __init__(self, parent=None): 19 super(Window, self).__init__(parent, Qt.Widget) 20 21 self.resize(460, 460) 22 self.setWindowTitle("Thread Test") 23 24 self.lineEdit = QLineEdit(self) 25 self.lineEdit.setPlaceholderText("connect to...") 26 self.pushButton = QPushButton(">>", self) 27 self.pushButton.setFixedWidth(30) 28 self.stopButton = QPushButton("×", self) 29 self.stopButton.setFixedWidth(30) 30 self.textEdit = QTextEdit(self) 31 self.textEdit.setPlaceholderText("result...") 32 33 grid = QGridLayout() 34 grid.addWidget(self.lineEdit, 0, 0, 1, 3) 35 grid.addWidget(self.pushButton, 0, 3) 36 grid.addWidget(self.stopButton, 0, 4) 37 grid.addWidget(self.textEdit, 1, 0, 5, 5) 38 self.setLayout(grid) 39 40 self.show()
界面如图:
1 class MyThread(QThread): 2 signal = pyqtSignal(str) 3 4 def __init__(self): 5 super().__init__() 6 self.source_txt = None 7 self.running = True 8 9 def __del__(self): 10 self.wait(1) 11 12 def on_source(self, line_text): 13 self.source_txt = line_text 14 15 def run(self): 16 while self.running: 17 self.signal.emit(self.source_txt) 18 time.sleep(1)
当线程开始运行时,每隔1秒传递一个self.source_txt。
1 class Run(Window): 2 sig = pyqtSignal(str) 3 4 def __init__(self): 5 super().__init__() 6 7 self.my_thread = None 8 self.pushButton.clicked.connect(self.button) 9 self.stopButton.clicked.connect(self.stop_button) 10 11 def button(self): 12 line_text = self.lineEdit.text() 13 self.my_thread = MyThread() 14 self.textEdit.clear() 15 self.my_thread.start() 16 self.my_thread.on_source(line_text) 17 self.my_thread.signal.connect(self.information) 18 self.pushButton.setEnabled(False) 19 20 def information(self, info): 21 self.textEdit.append(str(info)) 22 23 def stop_button(self): 24 self.my_thread.running = False 25 time.sleep(1) 26 self.pushButton.setEnabled(True) 27 28 29 if __name__ == "__main__": 30 app = QApplication(sys.argv) 31 win = Run() 32 sys.exit(app.exec_())
点击pushButton时,使按钮不可用,并启动线程,在文本编辑框内不断插入lienEdit的内容。
点击stopButton时,停止线程。
原文:https://www.cnblogs.com/jmtm/p/9796819.html