首页 > 编程语言 > 详细

【PyQt5 学习记录】004:简单多线程笔记

时间:2018-10-16 11:28:37      阅读:188      评论:0      收藏:0      [点我收藏+]

在文本编辑框中每隔几秒添加一行文本。

 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时,停止线程。

技术分享图片

 

【PyQt5 学习记录】004:简单多线程笔记

原文:https://www.cnblogs.com/jmtm/p/9796819.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!