一、装饰器信号与槽
1.基本概念
- 通过装饰器的方法来定义信号和槽函数
- 具体使用方法:
这种方法的使用的前提是QMetaObject.connectSlotsByName(QObject)已经执行
@PyQt5.QtCore.pyqtSlot(参数)
def on_发送者对象名称(就是)_发射信号名称(self,参数):
pass
# #自动识别 多加下面一行
self.okButton.clicked.connect(self.okButton_clicked)
#槽定义上名称发生改变,并且去除解释器
def okButton_clicked(self) :
print("点击了OK按钮")
2.代码
点击查看代码
# -*- coding: utf-8 -*-
"""
【简介】
信号和槽的自动连接例子
"""
from PyQt5 import QtCore
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QPushButton
import sys
class CustWidget(QWidget) :
def __init__(self, parent=None) :
super(CustWidget, self).__init__(parent)
self.okButton = QPushButton("OK", self)
# 使用setObjectName设置对象名称
self.okButton.setObjectName("okButton")
layout = QHBoxLayout()
layout.addWidget(self.okButton)
self.setLayout(layout)
QtCore.QMetaObject.connectSlotsByName(self)
# #自动识别 多加下面一行
# self.okButton.clicked.connect(self.okButton_clicked)
#解释器
@QtCore.pyqtSlot()
def on_okButton_clicked(self) :
print("点击了OK按钮")
# #自动识别
# def okButton_clicked(self) :
# print("点击了OK按钮")
if __name__ == "__main__" :
app = QApplication(sys.argv)
win = CustWidget()
win.show()
sys.exit(app.exec_())
3.运行结果

二、装饰器实现信号和槽的连接
- 使用装饰器来实现信号和槽之间的连接是一种技巧操作,对于特殊的开发环境和我们后期要学习到的Qt Designer有一定的帮助
- 在所有子控件下方加这条代码:
QMetaObject.connectSlotsByName(self)
def on_btn1_clicked(self) : # 注意命名规则 btn1就是第一个按钮
1.代码
点击查看代码
from PyQt5.Qt import *
import sys
class Window(QWidget) :
def __init__(self) :
super().__init__()
self.setWindowTitle("信号和槽")
self.resize(600, 500)
self.func_list()
def func_list(self) :
self.func()
self.on_btn1_clicked()
def func(self) :
btn = QPushButton('按钮', self)
btn.setObjectName('btn1')
btn.resize(80, 50)
btn.move(100, 100)
btn2 = QPushButton('按钮', self)
btn2.setObjectName('btn2')
btn2.resize(80, 50)
btn2.move(100, 200)
# 表示把window对象中的子对象按照objectName链接到相关的槽函数上,必须放在所有子控件的最后
# 按照名称连接槽
QMetaObject.connectSlotsByName(self)
#解释器+槽函数
@pyqtSlot(bool) # 这里bool表示按钮有没有被选中
def on_btn1_clicked(self) : # 注意命名规则 btn1就是第一个按钮
print('点击按钮')
if __name__ == '__main__' :
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
2.运行效果
