【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私信我.
随机推荐
- Android服务重启
现在有这样的需求,防止自己的app被其他的应用程序(比如qq手机管家)杀死,该怎么实现呢.我们知道app都是运行在进程中的,android是怎样管理这些进程的呢.要想app不被杀死,只要做到进程不被结 ...
- jQuery 事件注册
重点事件注册.on() <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset= ...
- i2c_smbs 函数
i2c_smbus系列函数有: s32 i2c_smbus_read_byte(const struct i2c_client *client); s32 i2c_smbus_write_byte(c ...
- Python文件读取和数据处理
一.python文件读取 1.基本操作 读取文件信息时要注意文件编码,文件编码有UFT-8.ASCII或UTF-16等. 不过在python中最为常用的是UTF-8,所以如果不特别说明就默认UTF-8 ...
- 【App性能分析】:tracelog分析法
tracelog可以记录每个OpenGL函数调用的消耗时间,所以很多时候用来作performance分析.目前只支持安卓4.1以上的版本设备 1,目前Android Device Monitor最新的 ...
- js数字动画
项目中需要的数字动画效果,网上找不到需要的效果,所以自己写了一个. 不多说,直接上干货:
- 《LeetBook》leetcode题解(8): String to Integer (atoi) [E]——正负号处理
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
- 用sql语句导出oracle中的存储过程和函数
用sql语句导出oracle中的存储过程和函数: SET echo off ; SET heading off ; SET feedback off ; SPOOL 'C:/PRC.SQL' repl ...
- 基础js--调试js
1,逻辑错误 常见错误: 是否由于拼写错误而导致申明了新的变量? 是否在条件判定上出现了疏漏? 方法:使用开发者工具调试代码 2,代码错误 常见错误: 是否拼写错误? 是否使用中文的符号? 扩展: 1 ...
- Linux 设置代理时, 密码出现特殊字符怎么办?
配置代理的格式一般是这样的: $ export https_proxy=https://用户名:密码@代理地址:代理端口 比如需要配置这些: $ export http_proxy=http://Co ...