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 以及自定义信号 测试的更多相关文章

  1. pyqt5 使用 QTimer, QThread, pyqtSignal 实现自动执行,多线程,自定义信号触发。

    渣渣用法,请等待我心情好的时候更新. 1.第一个例子 1.1 先看mainwindow.py from PyQt5 import QtCore, QtGui, QtWidgets class Ui_M ...

  2. Qt自定义信号槽的使用浅析+实例

    1. Qt中自定义信号槽的使用 Qt框架提供的信号槽在某些特定场景下是无法满足我们的项目需求的,因此我们还设计自己需要的的信号和槽,使用connect()对自定义的信号槽进行连接. 如果想要使用自定义 ...

  3. Qt之自定义信号和槽函数

    自定义信号和槽函数: 1.类的声明和实现分别放在.h和.cpp文件中: 2.类声明包含Q_OBJECT宏: 3.信号只要声明不要设计其的实现函数 4.发射信号用emit关键字 5.自定义槽的实现与普通 ...

  4. linux 自定义信号

    从来没试过linux自定义信号,查了下,说是系统只提供了SIGUSR1和SIGUSR2两个,就两个够吗?更要命的是如果要自定义信号如#define SIG_MYSIG   ....的话要改内核才行,哥 ...

  5. 【PyQt5-Qt Designer】pyqtSignal()-高级自定义信号与槽

    PyQt 5信号与槽的几种高级玩法 参考:http://www.broadview.com.cn/article/824 from PyQt5.QtCore import QObject , pyqt ...

  6. Qt 学习之路 2(5):自定义信号槽

    Home / Qt 学习之路 2 / Qt 学习之路 2(5):自定义信号槽 Qt 学习之路 2(5):自定义信号槽  豆子  2012年8月24日  Qt 学习之路 2  131条评论 上一节我们详 ...

  7. QT_5_ Qt中信号和槽 + 自定义信号和槽 + lambda 表达式

    1.Qt中信号和槽 1.1 需求:点击按钮关闭窗口 1.2 利用connect进行链接 1.3 参数1 信号发送者(指针) 参数2 发送的信号(信号地址) 参数3 信号的接受者(指针) 参数4 处理槽 ...

  8. Qt5教程: (3) 自定义信号与槽

    1. 自定义槽 槽可以是任何成员函数.普通全局函数.静态函数 槽函数和信号的参数和返回值要一致 由于信号是没有返回值的, 槽函数也一定没有返回值 首先在mainwidget.h中添加槽函数: publ ...

  9. QT自定义信号和槽

    最近项目中使用到QT,在此记录一下QT的核心,信号与槽: QObject::connect(const QObject *sender, const char *signal, const QObje ...

  10. Linux信号使用及自定义信号

    linux自定义信号:https://www.cnblogs.com/bigben0123/p/3186661.html linux信号.值及解释:https://blog.csdn.net/luot ...

随机推荐

  1. goland dlv在远程linux里运行代码开发,并debug调适

    一.配置好ssh自动同步代码 参考下面连接: https://www.cnblogs.com/haima/p/13257524.html 二.配置devbug监听运行 GO Remote 填写配置 l ...

  2. k8s-nginx实战部署1

    目录 yaml 资源清单 run_deploy.sh .gitlab-ci.yml yaml 资源清单 deploy.yaml apiVersion: v1 kind: ConfigMap metad ...

  3. kkfileview搭建指南

    最近公司有个需求,需要在线预览pdf,excel,world文档,pdf浏览器是直接支持预览的,vue也有很多插件支持,但是world文档和excel的方案就非常少了,市面上很多付费的,但是咱一般不舍 ...

  4. 基于Ubuntu-22.04安装K8s-v1.28.2实验(四)使用域名访问网站应用

    安装负载均衡metalb 安装metalb kubectl create namespace metallb-system 配置metalb #kubectl create secret generi ...

  5. 一次nginx文件打开数的问题排查处理

    现象:nginx域名配置合并之后,发现consul-template无法完成nginx重载,然后发现需要重启nginx,才能让配置生效. 注意:下次哪个服务有报错,就看重启时所有日志输出,各种情况日志 ...

  6. 免费考AI OCP认证,附通关秘籍!

    这是一个能让你快速熟悉AI相关技能的考试,由Oracle官方提供,而且限时免费. 它就是OCI Generative AI Professional. 可以看到,目前免费政策正在执行,到今年的7月31 ...

  7. centos 7网卡配置文件详解(ifcfg-ens33)

    centos 7网卡配置文件详解(ifcfg-ens33) [root@xuegod63 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE ...

  8. Python OpenCV #1 - OpenCV介绍

    一.OpenCV介绍 1.1 OpenCV-Python教程简介 OpenCV由 Gary Bradsky 于1999年在英特尔创立,第一个版本于2000年发布. Vadim Pisarevsky 加 ...

  9. JDK动态代理的深入理解

    引入代理模式 代理模式是框架中经常使用的一种模式,动态代理是AOP(面向切面编程)思想的一种重要的实现方式,在我们常用的框架中也经常遇见代理模式的身影,例如在Spring中事务管理就运用了动态代理,它 ...

  10. pymysql的基本操作

    1.Python3连接MySQL import pymysql pymysql.connect(host='localhost',user='root',password='1',database=' ...