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. Oracle EBS AR 事务处理到期余额总计API

    declare    -- Local variables here   i integer;   x_line_original NUMBER;   x_line_remaining NUMBER; ...

  2. Oracle EBS 锁

    这里仅提供查询锁和解锁.有时,锁是正常的,所以杀掉正锁着的进程有一定的风险性. 具体步骤如下: -- 1.0 查看 holder的进程 , 'Holder: ', 'Waiter: ') || sid ...

  3. json格式转换(json,csjon)(天气预报)

    json格式数据默认为string,可以使用eval()函数或者json模块将其转换为dict.标准Json字符串必须使用双引号(")而不能使用单引号('),否则从字符串转换成dict类型会 ...

  4. Office 365实现单点登录系列(4)—安装AD FS

    单一登录 (Single Sign-On)简而言之,就是让用户使用一套ID和密码,就可以登录一个或多个系统的授权机制.用户只需要通过其中一个应用的安全认证之后,再访问同一服务器其他应用的资源时不需要再 ...

  5. 铁乐学python_day09_作业

    练习题 1.整理函数相关知识点,写博客 2.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素, 并将其作为新列表返回给调用者. def odd_index(l): lis = [] for ...

  6. jumpserver 问题,给自己看的哦,你们不准看哟

    给自己看的,排版忽略! http://docs.jumpserver.org/zh/docs/setup_by_centos7.html 看完全部文档后解决不了再看下边的!!! docker 服务启动 ...

  7. 一、动态网络编程的概念 二、Tomcat服务器搭建 三、Servlet组件介绍

    一.动态网络编程的概念 动态网页:结合了HTML以外的高级程序编程语言和数据库技术生成的页面. 动态网页编程技术: ASP,PHP,JSP HTTP协议:规范浏览器和服务器之间通信的数据格式. 浏览器 ...

  8. PHP设计模式系列 - 数据访问对象模式

    数据访问对象模式 数据访问对象模式描述了如何创建透明访问数据源的对象. 场景设计 设计一个BaseDao基类,实现数据库操作基本的一些query,insert,update方法 在实际使用的过程中,继 ...

  9. 虚拟内存(VirtualAlloc),堆(HeapAlloc/malloc/new)和Memory Mapped File

    http://blog.csdn.net/zj510/article/details/39400087 内存管理有三种方式: 1. 虚拟内存,VirtualAlloc之类的函数 2. 堆,Heapxx ...

  10. 【[BJOI2017]魔法咒语】

    矩阵乘法+\(AC\)自动机 是道很不错的题了 首先是前六十分,就是一个\(AC\)自动机上的套路\(dp\),设\(dp[i][j]\)表示匹配出的长度为\(i\)在自动机上位置为\(j\)的方案数 ...