【PyQt5 学习记录】004:简单QThread笔记
在文本编辑框中每隔几秒添加一行文本,代码如下:
#!/usr/bin/python3
# -*- coding:utf-8 -*- import sys
from PyQt5.QtWidgets import (QApplication,
QWidget,
QLineEdit,
QPushButton,
QTextEdit,
QGridLayout)
from PyQt5.QtCore import (Qt,
QThread,
pyqtSignal,
pyqtSlot) class Window(QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent, Qt.Widget) self.resize(460, 460)
self.setWindowTitle("Thread Test") self.lineEdit = QLineEdit(self)
self.lineEdit.setPlaceholderText("connect to...")
self.pushButton = QPushButton(">>", self)
self.pushButton.setFixedWidth(30)
self.stopButton = QPushButton("×", self)
self.stopButton.setFixedWidth(30)
self.textEdit = QTextEdit(self)
self.textEdit.setPlaceholderText("result...") grid = QGridLayout()
grid.addWidget(self.lineEdit, 0, 0, 1, 3)
grid.addWidget(self.pushButton, 0, 3)
grid.addWidget(self.stopButton, 0, 4)
grid.addWidget(self.textEdit, 1, 0, 5, 5)
self.setLayout(grid) self.show() class Run(Window):
sig = pyqtSignal(str) def __init__(self):
super().__init__() self.my_thread = None
self.pushButton.clicked.connect(self.button)
self.stopButton.clicked.connect(self.stop_button) def button(self):
self.textEdit.clear()
line_text = self.lineEdit.text()
# 创建线程
self.my_thread = MyThread()
# 将自定义信号sig连接到MyThread.on_source函数
self.sig.connect(self.my_thread.on_source)
# 向MyThread.on_source函数传递line_text
self.sig.emit(line_text)
# 直接调用MyThread.on_source()也可以,但还是建议使用信号传递,在灵活性和性能上更佳
# self.my_thread.on_source(line_text)
# 将自定义信号signal连接到information()槽函数
self.my_thread.signal.connect(self.information)
# 启动线程
self.my_thread.start()
self.pushButton.setEnabled(False) @pyqtSlot(str)
def information(self, info):
# 向textEdit添加lineEdit的文本
self.textEdit.append(info) def stop_button(self):
self.pushButton.setEnabled(True)
# 将MyThread.running设为False以停止线程
self.my_thread.running = False class MyThread(QThread):
# 自定义型号,执行run()函数时,从相关线程发射此信号
signal = pyqtSignal(str) def __init__(self):
super().__init__()
self.source_txt = None
self.running = True # 当发生QThread: Destroyed while thread is still running错误时,添加QThread.wait()
# def __del__(self):
# self.wait() def on_source(self, line_text):
self.source_txt = line_text @pyqtSlot()
def run(self):
while self.running:
# 发出信号
self.signal.emit(self.source_txt)
# 线程休眠1秒
self.sleep(1) if __name__ == "__main__":
app = QApplication(sys.argv)
win = Run()
sys.exit(app.exec_())
界面如图:

当线程开始运行时,每隔1秒传递一个self.source_txt。
点击pushButton时,使按钮不可用,并启动线程,在文本编辑框内不断插入lienEdit的内容。
点击stopButton时,停止线程。

【PyQt5 学习记录】004:简单QThread笔记的更多相关文章
- 【PyQt5 学习记录】001:第一个界面
PyQt5 的安装很简单: pip3 install PyQt5 然后就是写一个最简单的界面试试手: import sys from PyQt5.QtWidgets import QApplicati ...
- SQLServer存储过程和触发器学习记录及简单例子
一.存储过程 存储过程即为能完成特定功能的一组SQL语句集.如果需要对查出的多条数据进行操作的话,这里需要理解游标(CURSOR)的概念,对于oracle有for each row命令,可以不用游标 ...
- 【PyQt5 学习记录】006:重写窗口事件及QMessageBox
#!/usr/bin/env python import sys from PyQt5.QtWidgets import (QApplication, QMainWindow, QMessageBox ...
- 【PyQt5 学习记录】011:使用 QListWidet 创建列表
使用 QListWidet 创建列表 作者: 八月未见 博客: https://www.cnblogs.com/jmtm/ 创建列表: list_widget = QListWidget() 插入项目 ...
- 【PyQt5 学习记录】010:QSplitter
import sys from PyQt5.QtWidgets import (QApplication, QWidget, QSplitter, QTextEdit, QPushButton, QL ...
- 【PyQt5 学习记录】005:QMainWindow 及状态栏、菜单栏和工具栏
#!/usr/bin/env python import sys from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QA ...
- 【PyQt5 学习记录】003:水平布局和获取屏幕尺寸
#!/usr/bin/python3 # -*- coding:utf-8 -*- import sys from PySide2.QtWidgets import (QApplication, QW ...
- Spring学习记录2——简单了解Spring容器工作机制
简单的了解Spring容器内部工作机制 Spring的AbstractApplicationContext是ApplicationContext的抽象实现类,该抽象类的refresh()方法定义了Sp ...
- Metasploit学习记录---Nessus简单使用
1.更新插件 上次搭建完后总觉得不踏实,因为老是提示插件多久没更新了,然后果断花了1.25美刀买了台vps,终于把最新的插件下载下来了,总共190M,需要的QQ私信我.
随机推荐
- Python笔记之字典循环
Python笔记之字典循环 1.问题 Python是一门比较好入门的编程语言,但是入门简单,当然坑也是有的,今天就来介绍一个我遇到的坑吧,也是很简单的一个,就是当时脑子有点转不过弯来了. 先看代码 ...
- leetcode-844-比较含退格的字符串(用vector取代stack)
题目描述: 给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果. # 代表退格字符. 示例 1: 输入:S = "ab#c", T = ...
- django在model中添加字段报错
在以下类中添加 description 字段后, class Colors(models.Model): colors = models.CharField(u'颜色', max_length=10) ...
- HTML03--表单、input、框架、URL
接上一篇“HTML02随笔”,在这里单独说一下HTML中最重要的标签--表单<form> 1.表单form:用于收集用户输入 <form action="" me ...
- 【面向对象】【prototype&&__proto__&&实例化对象三者之间的关系】
1.构造函数 a.什么是构造函数? 解释:通过关键字new 创建的函数叫做构造函数 作用:用来创建一个对象 废话少说直接上代码,首先我们还是创建一个构造函数人类 然后我们在创建两个实例,一个凡尘 一个 ...
- 安卓monkey自动化测试,软硬回车
1.Monkey程序介绍 在android手机上做自动化测试,monkey比cts,Android UnitTest 好用多了,他其实是继承与adb shell中的一段的shell指令. monkey ...
- VS 代码自动对齐快捷键
全部代码代码自动对齐快捷键为 Ctrl + a(按后可松松手) + k(按后可松松手) + f
- 认识CSS中字体图标
前端之HTML,CSS(十一) 字体图标 使用文字做出小图标的效果并超越了小图标应用精灵图,使得图标变得灵活,减少了请求次数,优化了界面的性能.字体图标本身为矢量图. 字体图标的使用过程 1.UI设计 ...
- mongoengine在python中的使用
# /usr/bin/python # encoding: utf-8 # Author: masako from mongoengine import * host ='127.0.0.1' por ...
- 何为Web App,何为Hybird App
这些概念听起来很火,当下也很流行,真正理解起来却并非易事.如果让我来全面的解释Web App和Hybird App,我觉得还有些困难. 这篇文章只是我深入了解移动领域开发过程中的不断整理和总结,其中涉 ...