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. All in One:Prometheus 多实例数据统一管理最佳实践

    01 引言 Prometheus 作为目前最主流的可观测开源项目之一,已经成为云原生监控的事实标准,被众多企业广泛应用.在使用 Prometheus 的时候,我们经常会遇到全局视图的需求,但是数据确分 ...

  2. XTuner 微调 LLM实操-书生浦语大模型实战营第二期第4节作业

    这一作业中提及的解释比较少,更多的只是一些步骤截图.这是因为教程中已经提及了几乎所有的细节信息,没有什么需要补充的.这个页面相较于官方教程的部分解释得过于详细的内容甚至是有所删减的.比如关于文件路径可 ...

  3. iptables命令详解

    安装iptables yum install iptables-services 编写允许访问的策略 vim /etc/sysconfig/iptables # sample configuratio ...

  4. CSS样式第四篇

    ​针对现在网站的图片过大问题,可以用相应的工具进行压缩,并且可对图片进行切割处理. 1.如果一个页面的图片过大,可以对其切割,代码<img src="1.jpg">&l ...

  5. 一个基于 Spring Dubbo 微服务的快速开发脚手架,新手入门必备!

    Spring-dubbo-skeleton 这是一个基于 Spring Dubbo 的快速开发脚手架,Github 地址:https://github.com/yxhsea/spring-dubbo- ...

  6. zfile 在线云盘、网盘、OneDrive、云存储、私有云、对象存储、h5ai、上传、下载

    基于 Java 的在线网盘程序,支持对接 S3.OneDrive.SharePoint.又拍云.本地存储.FTP.SFTP 等存储源,支持在线浏览图片.播放音视频,文本文件.Office.obj(3d ...

  7. itest work(爱测试) 开源一站式接口测试&敏捷测试工作站 9.0.5. Rc4

    (一)itest work 简介 itest work (爱测试)  一站式工作站让测试变得简单.敏捷,"好用.好看,好敏捷" ,是itest wrok 追求的目标.itest w ...

  8. numpy基础--random模块:随机数生成

    以下代码的前提:import numpy as np numpy.random模块对python内置的random进行了补充,增加了一些高效生成多种概率分布的样本值的函数.例如可以用normal来得到 ...

  9. LeetCode 409. Longest Palindrome 最长回文串(C++/Java)

    题目: Given a string which consists of lowercase or uppercase letters, find the length of the longest ...

  10. Python + redis操作Redis数据库

    Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...