pyqt5-信号与槽
个人理解:pyqt5的信号就是C++中事件,比如鼠标单击事件;pyqt5中的槽就是c++事件函数,比如单击之后要去执行的函数
例子一 一个信号连接一个槽
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton class Demo(QWidget): # 1
def __init__(self):
super(Demo, self).__init__() #注意:要传入(Demo, self)
self.button = QPushButton('Start', self) # 2
self.button.clicked.connect(self.change_text) # 3 def change_text(self): #槽函数
self.button.setText('Stop') #设置按钮显示的文本
self.button.clicked.disconnect(self.change_text) #信号和槽函数解绑,解绑后再单击按钮也不会执行槽函数
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = Demo() # 6
demo.show() # 7
sys.exit(app.exec_()) #1:该类从QWidget类继承,可以将QWidget看作是一种毛坯房【Demo看作容器】,还没有装修,而我们往其中放入QPushButton、QLabel等控件就相当于在装修这间毛坯房
#2:实例化一个QPushButton,参数self不能忘了(相当于告诉程序这个QPushButton是放在self中);参数1是要显示的文本
#3:连接信号与槽函数。self.button控件被单击时,就去执行函数self.change_text【clicked是信号;self.change_text是槽函数】
例子二 多个信号连接同一个槽 import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton class Demo(QWidget):
def __init__(self):
super(Demo, self).__init__()
self.button = QPushButton('Start', self)
self.button.pressed.connect(self.change_text) #鼠标左键按下时
self.button.released.connect(self.change_text) #鼠标左键释放时 def change_text(self):
if self.button.text() == 'Start':
self.button.setText('Stop')
else:
self.button.setText('Start') if __name__ == '__main__':
app = QApplication(sys.argv)
demo = Demo()
demo.show()
sys.exit(app.exec())
例子三 一个信号连接另一个信号
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton class Demo(QWidget):
def __init__(self):
super(Demo, self).__init__()
self.button = QPushButton('Start', self)
self.button.pressed.connect(self.button.released)
#将pressed信号和released信号连接起来,而released信号则与槽函数连接。这样当点击不放时,pressed信号发出,released信号也会发出,从而启动槽函数。释放鼠标则发出released信号,再次启动槽函数
self.button.released.connect(self.change_text) #鼠标左键释放时 def change_text(self):
if self.button.text() == 'Start':
self.button.setText('Stop')
else:
self.button.setText('Start') if __name__ == '__main__':
app = QApplication(sys.argv)
demo = Demo()
demo.show()
sys.exit(app.exec())
例子4 一个信号连接多个槽
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton class Demo(QWidget):
def __init__(self):
super(Demo, self).__init__()
self.resize(300, 300) #设置窗口大小
self.setWindowTitle('我的qt5练习') #设置窗口标题
self.button = QPushButton('Start', self)
self.button.clicked.connect(self.change_text)
self.button.clicked.connect(self.change_window_size)
self.button.clicked.connect(self.change_window_title)
#鼠标单击信号连接了三个函数 def change_text(self):
self.button.setText('停止')
self.button.clicked.disconnect(self.change_text) def change_window_size(self):
self.resize(500, 500)
self.button.clicked.disconnect(self.change_window_size) def change_window_title(self):
self.setWindowTitle('窗口标题发生改变')
self.button.clicked.disconnect(self.change_window_title) if __name__ == '__main__':
app = QApplication(sys.argv)
demo = Demo()
demo.show()
sys.exit(app.exec())
例子五---自定义信号
from PyQt5.QtWidgets import QApplication, QWidget,QPushButton
from PyQt5.QtCore import Qt
import sys
from PyQt5.QtCore import pyqtSignal #自定义信号模块 class Btn(QPushButton):
#rightclicked= pyqtSignal() #实例化一个自定义信号,在类内的自定义信号必须是类属性 #rightclicked= pyqtSignal(str)
#参数 可选 str---发出信号时向槽函数传递一个字符串
#【传递的数据类型,可以自己决定】 #rightclicked = pyqtSignal([str],[int])
#传递的参数有可能是字符串,有可能是整型数据,传递一个参数
#第一个是默认的 rightclicked = pyqtSignal([str,int])
#向槽函数传递两个参数 一个是str类型 一个是int类型 def mousePressEvent(self, event): # 鼠标键按下时调用
super().mousePressEvent(event) #执行父类的鼠标事件
#如果不行行父类,父类的鼠标左键单击事件等会被覆盖
n = event.button()
if n==Qt.RightButton:
#self.rightclicked.emit() #发出自定义信号 #self.rightclicked.emit('李明')
#参数 向常函数传递的文本字符串 #self.rightclicked[str].emit('李明')
#[str] 表示传递的参数类型是str self.rightclicked[str,int].emit('李明',867) class win(QWidget):
def __init__(self):
super().__init__()
self.resize(300,300)
self.pb=Btn('按钮',self)
self.pb.move(50,100)
self.pb.clicked.connect(self.AA) #self.pb.rightclicked.connect(self.BB)
self.pb.rightclicked[str,int].connect(self.BB)
#[str] 指明接受的参数类型是str def AA(self):
print('点击了鼠标左键')
# def BB(self):
# print('点击了鼠标右键') def BB(self,t,i):
print('点击了鼠标右键',t,i) if __name__=='__main__':
app=QApplication(sys.argv)
w=win()
w.show()
sys.exit(app.exec_())
装饰器连接信号与槽--根据setObjectName的值连接槽函数
王顺子 388
from PyQt5.QtWidgets import QApplication, QWidget,QPushButton
from PyQt5.QtCore import Qt,pyqtSlot
import sys
from PyQt5 import QtCore class win(QWidget):
def __init__(self):
super().__init__()
self.resize(300,300)
self.btn=QPushButton('按钮',self)
self.btn.move(50,100)
self.btn.setObjectName('btn') QtCore.QMetaObject.connectSlotsByName(self) #将参数内部的子孙对象的信号, 根据objectName连接到相关的槽函数
#注意 这句要防止控件创建之后 setObjectName之后 @pyqtSlot(bool) #bool 接受数据的类型--可选
def on_btn_clicked(self,v):#格式:ON_setObjectName的值_信号动作
print('点击了鼠标左键',v) if __name__=='__main__':
app=QApplication(sys.argv)
w=win()
w.show()
sys.exit(app.exec_())
pyqt5-信号与槽的更多相关文章
- [ PyQt入门教程 ] PyQt5信号与槽
信号和槽是PyQt编程对象之间进行通信的机制.每个继承自QWideget的控件都支持信号与槽机制.信号发射时(发送请求),连接的槽函数就会自动执行(针对请求进行处理).本文主要讲述信号和槽最基本.最经 ...
- pyqt5信号与槽2
信号和槽与类的属性和方法在层次上是相同的,同属与一个类的特征. 信号的定义由工厂函数生成: signal=PyQt5.QtCore.pyqtSignal(types[, name[, result[, ...
- PyQt5信号与槽详解
1.信号与槽函数基础'''信号与槽函数基础,信号是一个事件,发射信号之后槽函数就会执行'''from PyQt5.QtWidgets import *import sys class signal(Q ...
- PyQt5信号与槽关联的两种方式
目录 通过QtDesigner 手动关联的方式 通过QtDesigner 单击菜单栏切换到信号槽编辑模式 单击控件并拖动鼠标到信号的接收对象上,一般为对话框自己,松开鼠标弹出信号和槽选择框 选中cli ...
- PyQt5信号与槽
简单使用 可以使用designer的一个模式定义,也可以自己定义,在__init__函数里,self.btn.clicked.connect(self.text.clear). 注意:槽不用加括号,可 ...
- PyQt5中的信号与槽,js 与 Qt 对象之间互相调用
一.PyQt中的信号与槽 信号(Signal)和槽(Slot)是Qt中的核心机制,用在对象之间互相通信.在Qt中每个QObject对象和PyQt中所有继承自QWidget的控件(这些都是QObject ...
- 五、Pyqt5事件、信号和槽
PyQt中提供了两种针对事件处理的机制:一种是事件,另一种则是信号和槽. 一.事件 事件处理在PyQt中是比较底层的,常用的事件有键盘事件.鼠标事件.拖放事件.滚轮事件.定时事件.焦点事件.进入和离开 ...
- PyQt5(3)——信号和槽初探
信号和槽是QT的核心机制(当信号发射时,链接的槽函数会自动执行) 在pyqt5中信号和槽通过 QObject.signal.connect()链接. QObject类或子类(QWidget)派生的类都 ...
- PyQt5信号-槽机制
signal -> emit -> slot signal.connect(slot) signal.disconnect(slot) 信号 (singal) 可以连接无数多个槽 (slo ...
- PyQT5:信号和槽
PyQT5:信号和槽 信号和槽 Qt的主要特征之一是它使用信号和插槽在对象之间进行通信. 当潜在的事件发生时,会发出一个信号.插槽是可调用的Python,如果将信号连接到插槽,则在发出信号时将调用该插 ...
随机推荐
- CTF—攻防练习之HTTP—PUT上传漏洞
主机:192.168.32.152 靶机:192.168.32.159 中间件PUT漏洞 包括apache,tomcat,IIS等中间件设置支持的HTTP方法(get,post,head,delete ...
- 1.LTE系统概述
信息源:中国大学MOOC 中搜索 移动通信网络与优化 兰州交通大学 3GPP协议:https://www.3gpp.org/DynaReport/36-series.htm 可以在中国大学MOOC中搜 ...
- 深入理解java:4. 框架编程
了解 Servlet 和 Filter Servlet(即servlet-api.jar) 是 J2EE 最重要的一部分,有了 Servlet 你就是 J2EE 了,J2EE 的其他方面的内容择需采用 ...
- 深入理解java:2.3.4. 并发编程concurrent包 之容器ConcurrentLinkedQueue(非阻塞的并发队列---循环CAS)
1. 引言 在并发编程中我们有时候需要使用线程安全的队列. 如果我们要实现一个线程安全的队列有两种实现方式:一种是使用阻塞算法,另一种是使用非阻塞算法. 使用阻塞算法的队列可以用一个锁(入队和出 ...
- vue--过滤器(私有,全局)
过滤器 概念:Vue.js 允许你自定义过滤器,可被用作一些常见的文本格式化.过滤器可以用在两个地方:mustache 插值和 v-bind 表达式.过滤器应该被添加在 JavaScript 表达式的 ...
- Win10 开启 热点的简单办法
- POJ2387 Til the Cows Come Home (最短路 dijkstra)
AC代码 POJ2387 Til the Cows Come Home Bessie is out in the field and wants to get back to the barn to ...
- HDU-5155 Harry And Magic Box
题目描述 在\(n*m\)的矩阵内每一行每一列都有钻石,问钻石分布的种类? 答案有可能很大,所以输出答案对\(1000000007\)取模. Input 对于每个测试用例,有两个整数\(n\)和\(m ...
- 关于c++对拍的办法
众所周知,在\(oi\)学习以及考试中,对拍是一件非常重要的事. 有了对拍后,我们可以利用它发现代码上的一些非常难看出来的错误. 编写对拍程序一般有两个办法. 方案一 编写一个对拍的\(cpp\),并 ...
- git diff 命令用法
理解git diff的前提,首先要理解git中工作区,暂存区,本地版本库的概念,如果头脑中有这些概念,接着往下读. git diff test.c 用来查看工作区和暂存区中test.c文件的区别. g ...