首页 技术 正文
技术 2022年11月12日
0 收藏 498 点赞 4,293 浏览 2759 个字

PyQt 的很多类都内置了信号和槽。下图是 Qt 官方文档对 QThread 类中包含的信号/槽的描述:

PyQt5 笔记(05):信号/槽

一、信号/槽 都是内置的

请看一个最简单的程序: 按钮点击后,窗口关闭

PyQt5 笔记(05):信号/槽

代码:

class Test(QDialog):
def __init__(self, parent=None):
super().__init__(parent) btn = QPushButton('关闭', self) btn.clicked.connect(self.close) # ①

对语句①的说明:

信号 ==> 槽
  信号(btn.clicked)、槽(self.close)都是内置
  作用:按钮点击后,窗口关闭

完整代码:

from PyQt5.QtWidgets import *
import sysclass Test(QDialog):
def __init__(self,parent=None):
super().__init__(parent) btn = QPushButton('关闭', self) btn.clicked.connect(self.close) if __name__ == '__main__':
app = QApplication(sys.argv)
dlg = Test()
dlg.show()
sys.exit(app.exec_())

二、信号内置、槽自定义

功能同上。

class Test(QDialog):
def __init__(self,parent=None):
super().__init__(parent) btn = QPushButton('关闭', self) btn.clicked.connect(self.my_close) # ① def my_close(self): # ② 自定义槽
self.close()

对语句①的说明:

信号 ==> 槽
  信号(btn.clicked)是内置的、槽(self.my_close)是自定义
  作用:按钮点击后,窗口关闭

完整代码:

from PyQt5.QtWidgets import *
import sysclass Test(QDialog):
def __init__(self,parent=None):
super().__init__(parent) btn = QPushButton('关闭', self) btn.clicked.connect(self.my_func) def my_func(self):
self.close()if __name__ == '__main__':
app = QApplication(sys.argv)
dlg = Test()
dlg.show()
sys.exit(app.exec_())

三、信号是自定义的,槽是内置的

class Test(QDialog):    button_clicked_signal = pyqtSignal() # 自定义信号,不带参    def __init__(self,parent=None):
super().__init__(parent) btn = QPushButton('关闭', self)
btn.clicked.connect(self.btn_clicked) # ① 信号/槽 self.button_clicked_signal.connect(self.close) # ③接收信号,连接到槽 def btn_clicked(self):
self.button_clicked_signal.emit() # ②发送自定义信号,无参

对语句③的说明:

信号 ==> 槽
  信号(button_clicked_signal)是自定义的、槽(self.close)是内置
  作用:按钮点击后,窗口关闭

附图说明一下执行顺序:

PyQt5 笔记(05):信号/槽

完整代码:

from PyQt5.QtWidgets import *
import sysclass Test(QDialog): button_clicked_signal = pyqtSignal() # 自定义信号,不带参 def __init__(self,parent=None):
super().__init__(parent) btn = QPushButton('关闭', self)
btn.clicked.connect(self.btn_clicked) # 信号/槽 self.button_clicked_signal.connect(self.close) # 接收信号,连接到槽 def btn_clicked(self):
self.button_clicked_signal.emit() # 发送自定义信号,无参if __name__ == '__main__':
app = QApplication(sys.argv)
dlg = Test()
dlg.show()
sys.exit(app.exec_())

四、信号/槽 都是自定义的

class Test(QDialog):    button_clicked_signal = pyqtSignal() # 自定义信号,不带参    def __init__(self,parent=None):
super().__init__(parent) btn = QPushButton('关闭', self)
btn.clicked.connect(self.btn_clicked) # 信号/槽 self.button_clicked_signal.connect(self.my_close) # 接收信号,连接到槽 def btn_clicked(self):
self.button_clicked_signal.emit() # 发送自定义信号,无参 def my_close(self):
self.close()

完整代码:

from PyQt5.QtWidgets import *
import sysclass Test(QDialog): button_clicked_signal = pyqtSignal() # 自定义信号,不带参 def __init__(self,parent=None):
super().__init__(parent) btn = QPushButton('关闭', self)
btn.clicked.connect(self.btn_clicked) # 信号/槽 self.button_clicked_signal.connect(self.my_close) # 接收信号,连接到槽 def btn_clicked(self):
self.button_clicked_signal.emit() # 发送自定义信号,无参 def my_close(self):
self.close()if __name__ == '__main__':
app = QApplication(sys.argv)
dlg = Test()
dlg.show()
sys.exit(app.exec_())
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,088
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,565
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,413
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,186
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,822
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905