个人理解: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-信号与槽的更多相关文章

  1. [ PyQt入门教程 ] PyQt5信号与槽

    信号和槽是PyQt编程对象之间进行通信的机制.每个继承自QWideget的控件都支持信号与槽机制.信号发射时(发送请求),连接的槽函数就会自动执行(针对请求进行处理).本文主要讲述信号和槽最基本.最经 ...

  2. pyqt5信号与槽2

    信号和槽与类的属性和方法在层次上是相同的,同属与一个类的特征. 信号的定义由工厂函数生成: signal=PyQt5.QtCore.pyqtSignal(types[, name[, result[, ...

  3. PyQt5信号与槽详解

    1.信号与槽函数基础'''信号与槽函数基础,信号是一个事件,发射信号之后槽函数就会执行'''from PyQt5.QtWidgets import *import sys class signal(Q ...

  4. PyQt5信号与槽关联的两种方式

    目录 通过QtDesigner 手动关联的方式 通过QtDesigner 单击菜单栏切换到信号槽编辑模式 单击控件并拖动鼠标到信号的接收对象上,一般为对话框自己,松开鼠标弹出信号和槽选择框 选中cli ...

  5. PyQt5信号与槽

    简单使用 可以使用designer的一个模式定义,也可以自己定义,在__init__函数里,self.btn.clicked.connect(self.text.clear). 注意:槽不用加括号,可 ...

  6. PyQt5中的信号与槽,js 与 Qt 对象之间互相调用

    一.PyQt中的信号与槽 信号(Signal)和槽(Slot)是Qt中的核心机制,用在对象之间互相通信.在Qt中每个QObject对象和PyQt中所有继承自QWidget的控件(这些都是QObject ...

  7. 五、Pyqt5事件、信号和槽

    PyQt中提供了两种针对事件处理的机制:一种是事件,另一种则是信号和槽. 一.事件 事件处理在PyQt中是比较底层的,常用的事件有键盘事件.鼠标事件.拖放事件.滚轮事件.定时事件.焦点事件.进入和离开 ...

  8. PyQt5(3)——信号和槽初探

    信号和槽是QT的核心机制(当信号发射时,链接的槽函数会自动执行) 在pyqt5中信号和槽通过 QObject.signal.connect()链接. QObject类或子类(QWidget)派生的类都 ...

  9. PyQt5信号-槽机制

    signal -> emit -> slot signal.connect(slot) signal.disconnect(slot) 信号 (singal) 可以连接无数多个槽 (slo ...

  10. PyQT5:信号和槽

    PyQT5:信号和槽 信号和槽 Qt的主要特征之一是它使用信号和插槽在对象之间进行通信. 当潜在的事件发生时,会发出一个信号.插槽是可调用的Python,如果将信号连接到插槽,则在发出信号时将调用该插 ...

随机推荐

  1. git 本地代码提交至远程master分支解决方法

    git 提交代码,本地新建一个my分支,不从本地master分支直接上传,而是先从本地my分支上提交至本地master分支,然后本地master提交至远程master分支上.前提是远程只有一个mast ...

  2. 解密Go语言之 pprof

    相信很多人都听过“雷神 3”关于性能优化的故事.在一个 3D 游戏引擎的源码里,John Carmack 将 1/sqrt(x) 这个函数的执行效率优化到了极致. 一般我们使用二分法,或者牛顿迭代法计 ...

  3. Capabilities 入门教程:基础实战篇

    该系列文章总共分为三篇: Linux Capabilities 入门教程:概念篇 Linux Capabilities 入门教程:基础实战篇 待续... 上篇文章介绍了 Linux capabilit ...

  4. 关于FPS游戏的设计问题

    第一个想到的问题: 首先以unity的FPSCharactorController为例,这里规定,相机的方向中心一定是瞄准的方向中心.设置身体的扭曲朝向相机方向,这样身体可以弯腰.你们看图中,我让玩家 ...

  5. 配置java开发环境,存在多个版本JDK时,怎样让所需版本生效

    我本地有个1.7.0的java版本,后来我新装了一个13的版本,但是命令行查java版本的时候,生效的还是1.7.0的版本,经过资料查询以及自身亲测,现将过程记录如下: 1.电脑右键选择--属性--高 ...

  6. jenkins自动化部署工具

    jenkins自动化测试 & 持续集成 知识点: 1.下载地址:jenkins.io download:

  7. mysql——触发器——前期整理笔记00

    一.触发器 触发器是由事件来出发某个动作.这些事件包括insert语句.update语句和delete语句. 当数据库系统执行这些事件时,就会激活触发器执行相应得动作. 触发器是有insert.upd ...

  8. java script 的注释与分号

    // 单行注释 /**/多行注释 在js 中 变量.函数和操作符都是区分大小写的 什么是标识符 变量.函数.属性的名字.或者函数的参数. 变量的命名规范:不能以数字开头. 变量声明: var  nam ...

  9. qt 两种按钮点击事件应用

    1.传统connect 例如: connect(ui->findPushBtn,SIGNAL(clicked()),this,SLOT(find())); 参数1:事件UI 参数2:点击系统函数 ...

  10. SSM笔记

    Spring Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象.也可以称之为项目中的粘合剂. Spring的核心思想是IoC(控制 ...