pyside6 QThread 以及自定义信号 测试
import sys
import random
from time import sleep
from PySide6 import QtCore as qc
from PySide6 import QtWidgets as qw
# from PySide6 import QtGui as qg
class sub(qc.QThread):
'''定义一个后台线程'''
# 定义一个 信号, 信号要传递一个 bool 型参数
sg = qc.Signal(bool)
def __init__(self, *args, **kw):
super().__init__(*args, **kw)
# connect
self.sg.connect(self.m1)
# 自定一个信号,在后续,会触发这个信号。这个信号在别的线程
self.sg2:qc.Signal = None
self._flg = False
# 写一个 具体的过程
def run(self):
try:
for _ in range(100):
sleep(0.2)
if self._flg:
if self.sg2 is not None:
# 在后台线程 发出信号, 发给相连接的前面线程
self.sg2.emit()
except Exception as error:
print(str(error))
raise(error)
# 接收信号,处理事务
@qc.Slot(bool)
def m1(self, v:bool):
self._flg = v
class MyWidget(qw.QWidget):
def __init__(self):
super().__init__()
self.sgg:qc.Signal = None
self.hello = ["Hallo A", "Hallo B", "Hallo C", "Hallo D"]
self.v = True
self.button = qw.QPushButton("Click me!")
self.text = qw.QLabel("Hello World", alignment=qc.Qt.AlignCenter)
self.b3 = qw.QPushButton("click to start")
self.layout = qw.QVBoxLayout(self)
self.layout.addWidget(self.text)
self.layout.addWidget(self.button)
self.layout.addWidget(self.b3)
# qc.Qt.ConnectionType.QueuedConnection 在信号的接收方,延时执行动作
qc.QObject.connect(self.button, qc.SIGNAL("clicked()"), self.magic, qc.Qt.ConnectionType.QueuedConnection)
qc.QObject.connect(self.b3, qc.SIGNAL("clicked()"), self.m3, qc.Qt.ConnectionType.QueuedConnection)
# 前台按扭的动作
@qc.Slot()
def magic(self):
t = self.text.text()
while True:
s = random.choice(self.hello)
if s != t:
t = s
break
self.text.setText(t)
# 前台按扭的动作,同时更新界面,并把信号发给后台
@qc.Slot()
def m3(self):
if self.sgg is not None:
# 传一个 bool 值给后台
self.sgg.emit(self.v)
self.v = not self.v
else:
print('None')
# 更新界面的文字
self.b3.setText("click to start" if self.v else"click to stop")
if __name__ == "__main__":
app = qw.QApplication([])
widget = MyWidget()
widget.resize(250, 150)
# 创建后台线程
p = sub()
# 信号的传递
widget.sgg = p.sg
p.sg2 = widget.button.clicked
widget.show()
# 起动后台线程
p.start()
sys.exit(app.exec())

pyside6 QThread 以及自定义信号 测试的更多相关文章
- pyqt5 使用 QTimer, QThread, pyqtSignal 实现自动执行,多线程,自定义信号触发。
渣渣用法,请等待我心情好的时候更新. 1.第一个例子 1.1 先看mainwindow.py from PyQt5 import QtCore, QtGui, QtWidgets class Ui_M ...
- Qt自定义信号槽的使用浅析+实例
1. Qt中自定义信号槽的使用 Qt框架提供的信号槽在某些特定场景下是无法满足我们的项目需求的,因此我们还设计自己需要的的信号和槽,使用connect()对自定义的信号槽进行连接. 如果想要使用自定义 ...
- Qt之自定义信号和槽函数
自定义信号和槽函数: 1.类的声明和实现分别放在.h和.cpp文件中: 2.类声明包含Q_OBJECT宏: 3.信号只要声明不要设计其的实现函数 4.发射信号用emit关键字 5.自定义槽的实现与普通 ...
- linux 自定义信号
从来没试过linux自定义信号,查了下,说是系统只提供了SIGUSR1和SIGUSR2两个,就两个够吗?更要命的是如果要自定义信号如#define SIG_MYSIG ....的话要改内核才行,哥 ...
- 【PyQt5-Qt Designer】pyqtSignal()-高级自定义信号与槽
PyQt 5信号与槽的几种高级玩法 参考:http://www.broadview.com.cn/article/824 from PyQt5.QtCore import QObject , pyqt ...
- Qt 学习之路 2(5):自定义信号槽
Home / Qt 学习之路 2 / Qt 学习之路 2(5):自定义信号槽 Qt 学习之路 2(5):自定义信号槽 豆子 2012年8月24日 Qt 学习之路 2 131条评论 上一节我们详 ...
- QT_5_ Qt中信号和槽 + 自定义信号和槽 + lambda 表达式
1.Qt中信号和槽 1.1 需求:点击按钮关闭窗口 1.2 利用connect进行链接 1.3 参数1 信号发送者(指针) 参数2 发送的信号(信号地址) 参数3 信号的接受者(指针) 参数4 处理槽 ...
- Qt5教程: (3) 自定义信号与槽
1. 自定义槽 槽可以是任何成员函数.普通全局函数.静态函数 槽函数和信号的参数和返回值要一致 由于信号是没有返回值的, 槽函数也一定没有返回值 首先在mainwidget.h中添加槽函数: publ ...
- QT自定义信号和槽
最近项目中使用到QT,在此记录一下QT的核心,信号与槽: QObject::connect(const QObject *sender, const char *signal, const QObje ...
- Linux信号使用及自定义信号
linux自定义信号:https://www.cnblogs.com/bigben0123/p/3186661.html linux信号.值及解释:https://blog.csdn.net/luot ...
随机推荐
- goland dlv在远程linux里运行代码开发,并debug调适
一.配置好ssh自动同步代码 参考下面连接: https://www.cnblogs.com/haima/p/13257524.html 二.配置devbug监听运行 GO Remote 填写配置 l ...
- k8s-nginx实战部署1
目录 yaml 资源清单 run_deploy.sh .gitlab-ci.yml yaml 资源清单 deploy.yaml apiVersion: v1 kind: ConfigMap metad ...
- kkfileview搭建指南
最近公司有个需求,需要在线预览pdf,excel,world文档,pdf浏览器是直接支持预览的,vue也有很多插件支持,但是world文档和excel的方案就非常少了,市面上很多付费的,但是咱一般不舍 ...
- 基于Ubuntu-22.04安装K8s-v1.28.2实验(四)使用域名访问网站应用
安装负载均衡metalb 安装metalb kubectl create namespace metallb-system 配置metalb #kubectl create secret generi ...
- 一次nginx文件打开数的问题排查处理
现象:nginx域名配置合并之后,发现consul-template无法完成nginx重载,然后发现需要重启nginx,才能让配置生效. 注意:下次哪个服务有报错,就看重启时所有日志输出,各种情况日志 ...
- 免费考AI OCP认证,附通关秘籍!
这是一个能让你快速熟悉AI相关技能的考试,由Oracle官方提供,而且限时免费. 它就是OCI Generative AI Professional. 可以看到,目前免费政策正在执行,到今年的7月31 ...
- centos 7网卡配置文件详解(ifcfg-ens33)
centos 7网卡配置文件详解(ifcfg-ens33) [root@xuegod63 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE ...
- Python OpenCV #1 - OpenCV介绍
一.OpenCV介绍 1.1 OpenCV-Python教程简介 OpenCV由 Gary Bradsky 于1999年在英特尔创立,第一个版本于2000年发布. Vadim Pisarevsky 加 ...
- JDK动态代理的深入理解
引入代理模式 代理模式是框架中经常使用的一种模式,动态代理是AOP(面向切面编程)思想的一种重要的实现方式,在我们常用的框架中也经常遇见代理模式的身影,例如在Spring中事务管理就运用了动态代理,它 ...
- pymysql的基本操作
1.Python3连接MySQL import pymysql pymysql.connect(host='localhost',user='root',password='1',database=' ...