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

一、信号/槽 都是内置的

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

代码:

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 sys class 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 sys class 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)是内置
  作用:按钮点击后,窗口关闭

附图说明一下执行顺序:

完整代码:

from PyQt5.QtWidgets import *
import sys 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() # 发送自定义信号,无参 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 sys 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() if __name__ == '__main__':
app = QApplication(sys.argv)
dlg = Test()
dlg.show()
sys.exit(app.exec_())

PyQt5 笔记(05):信号/槽的更多相关文章

  1. pyqt5界面与逻辑分离--信号槽的装饰器实现方式

    本文展示了 pyqt5 信号槽的装饰器实现方式(借鉴自 eirc6) 一个简单的例子.实现功能:两个数相加,显示结果.如图 两个文件,第一个是界面文件 ui_calc.py # ui_calc.py ...

  2. PyQt5信号-槽机制

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

  3. 【QT学习笔记】二、信号槽和自定义信号槽

    1. 信号槽 int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton button("Qui ...

  4. Qt信号槽的一些事(第一次知道信号还有返回值,以及Qt::UniqueConnection)

    注:此文是站在Qt5的角度说的,对于Qt4部分是不适用的. 1.先说Qt信号槽的几种连接方式和执行方式. 1)Qt信号槽给出了五种连接方式: Qt::AutoConnection 0 自动连接:默认的 ...

  5. PyQt5 笔记(04):主窗口卡死问题

    本文基于:windows 7 + python 3.4 知识点: 1. 将 time.sleep 替换为 QTimer 2. 将 time.sleep 放入到 QThread 3. 使用 QThrea ...

  6. PyQt5 笔记(03):弹出窗口大全

    本文实现了PyQt5个各种弹出窗口:输入框.消息框.文件对话框.颜色对话框.字体对话框.自定义对话框 其中,为了实现自定义对话框的返回值,使用了信号/槽 本文基于 windows 7 + python ...

  7. PyQt5 笔记

    一.简介 pyqt5做为Python的一个模块,它有620多个类和6000个函数和方法.这是一个跨平台的工具包,它可以运行在所有主要的操作系统,包括UNIX,Windows,Mac OS.pyqt5是 ...

  8. 利用Qt中的ui文件生成PyQt5程序,自定义槽函数

    1.在Qt Creator4.8.0上面设计如上.ui文件 2.点击上方图标,可以建立信号-槽连接,button_click()为自定义槽函数 3.设计目的:点击clear按钮,可消除上方文本框中的内 ...

  9. Boost信号/槽signals2

    信号槽是Qt框架中一个重要的部分,主要用来解耦一组互相协作的类,使用起来非常方便.项目中有同事引入了第三方的信号槽机制,其实Boost本身就有信号/槽,而且Boost的模块相对来说更稳定. signa ...

随机推荐

  1. AWK与SED命令

    linux系统比较常用的AWK与SED命令,这两个命令主要是格式化文本文件信息.接下来将详细介绍这两个命令的基本用法以及可以实现的功能. 一.AWK命令 AWK语言的基本功能是在文件或者字符串中基于指 ...

  2. OSCache-缓存对象

    在实际应用中除了JSP标签库,还可以使用OSCache提供的Java API.下面我来介绍一个实用的Java类,使用GeneralCacheAdministrator来建立,刷新和管理缓存. Gene ...

  3. [翻译] ASFTableView

    ASFTableView A customizable Web like multi column table view for iOS with header and inner rows. 一个类 ...

  4. MDT概念说明

    转自:http://www.winos.cn/html/21/t-39621.html         http://hi.baidu.com/popweb/item/95ea6cf3aea966b5 ...

  5. Python初学者第二十四天 函数进阶(3)生成器

    24day 1.列表生成式: 循环模式:[变量(加工后的变量) for 变量 in iterable] print([i for i in range(0,101,2)]) [1,4,9,16,25, ...

  6. Ubuntu Linux 14.04 LTS 上安装php7+mysql+nginx

    输入 $ sudo apt-get install -y language-pack-en-base$ sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:o ...

  7. 第0篇 如何访问win10的C$等默认共享

    近日换新机器,装了win10,但想从旧机器访问win10的\\ip\D$拷数据过去,首先发现怎么也连不上win10的共享,于是把win10防火墙中“文件和打印机共享”的“专用”(即内网)勾选上终于可以 ...

  8. MySQL知识总结(三)存储过程

    1. 创建存储过程 1.1 无参数存储过程 CREATE PROCEDURE bruce_procedure () BEGIN --1.声明变量 --2.执行业务逻辑 END 1.2 有参数的存储过程 ...

  9. CSS3 Transform变形理解与应用

    CSS3 Transform变形理解与应用 Transform:对元素进行变形:Transition:对元素某个属性或多个属性的变化,进行控制(时间等),类似flash的补间动画.但只有两个关键贞.开 ...

  10. ceph 分布式存储安装

    [root@localhost ~]# rm -rf /etc/yum.repos.d/*.repo 下载阿里云的base源 [root@localhost ~]# wget -O /etc/yum. ...