信号槽Signals & slots

sld.valueChanged.connect(lcd.display)

# 将滚动条的valueChanged信号连接到lcd的display插槽

 # Author:凌逆战
# -*- coding:utf-8 -*-
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget, QLCDNumber, QSlider, QVBoxLayout, QApplication class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI() def initUI(self):
lcd = QLCDNumber(self) # 创建一个lcd显示屏对象
sld = QSlider(Qt.Horizontal, self) #创建一个水平的滑块 vbox = QVBoxLayout() # 创建垂直布局
vbox.addWidget(lcd) # 在垂直布局中添加lcd显示屏
vbox.addWidget(sld) # 在垂直布局中添加水平滑块 self.setLayout(vbox) # 设置垂直布局
# 将滑块的valueChanged信号连接到lcd的display插槽
sld.valueChanged.connect(lcd.display) self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Signal & slot')
self.show() if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

重新实现事件处理器

def keyPressEvent(self, e):
if e.key() == Qt.Key_Escape:
self.close()

# 重新实现了keyPressEvent()事件处理器

# 键盘按下Escape键会使程序退出

 # Author:凌逆战
# -*- coding:utf-8 -*-
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget, QApplication class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI() def initUI(self):
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Event handler')
self.show() def keyPressEvent(self, e):
if e.key() == Qt.Key_Escape:
self.close() if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

重新实现事件处理器

事件发送者

btn1.clicked.connect(self.buttonClicked)
btn2.clicked.connect(self.buttonClicked)

# 两个按钮绑定到同一个插槽

def buttonClicked(self):
sender = self.sender()
self.statusBar().showMessage(sender.text() + ' was pressed')

# 通过调用sender()方法来判断信号源, 并将其名称显示在窗体的状态栏中。

 # Author:凌逆战
# -*- coding:utf-8 -*-
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI() def initUI(self):
btn1 = QPushButton("Button 1", self) # 按钮一Button1
btn1.move(30, 50) btn2 = QPushButton("Button 2", self) # 按钮二Button2
btn2.move(150, 50)
# 两个按钮绑定到一个插槽
btn1.clicked.connect(self.buttonClicked) # 按钮一绑定事件
btn2.clicked.connect(self.buttonClicked) # 按钮二绑定事件 self.statusBar() # 创建一个状态栏 self.setGeometry(300, 300, 290, 150)
self.setWindowTitle('Event sender')
self.show() def buttonClicked(self):
sender = self.sender() # 通过调用sender()方法来判断信号源
self.statusBar().showMessage(sender.text() + ' was pressed') if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

事件发送者

发出信号

class Communicate(QObject):
closeApp = pyqtSignal()

# 创建了一个名为closeApp的信号

self.c = Communicate()
self.c.closeApp.connect(self.close)

# 自定义closeApp信号连接到QMainWindow的close槽

def mousePressEvent(self, event):
self.c.closeApp.emit()

# 当在窗体上点击鼠标时会触发closeApp信号,使程序退出。

 # Author:凌逆战
# -*- coding:utf-8 -*-
import sys
from PyQt5.QtCore import pyqtSignal, QObject
from PyQt5.QtWidgets import QMainWindow, QApplication
# 创建一个closeAPP信号
class Communicate(QObject):
closeApp = pyqtSignal() class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI() def initUI(self):
self.c = Communicate()
self.c.closeApp.connect(self.close) # 自定义closeAPP信号连接到QMainWindow的close槽 self.setGeometry(300, 300, 290, 150)
self.setWindowTitle('Emit signal')
self.show()
# 重写mousePressEvent函数
# 当在窗体上点击鼠标时会触发closeAPP信号,是程序退出
def mousePressEvent(self, event):
self.c.closeApp.emit() if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

点击鼠标,退出窗口

PyQt 5事件和信号的更多相关文章

  1. Python pyQt4/PyQt5 学习笔记4(事件和信号)

    信号 & 槽 import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import (QWidget,QLCDNumber,QS ...

  2. PyQt5教程——事件和信号(5)

    PyQt5中的事件和信号 在这部分PyQt5编程教程中,我们探索应用中事件和信号的发生. 事件 所有的GUI应用都是事件驱动的.事件主要由应用的用户操作产生的.但是事件可能由其他条件触发,比如:一个网 ...

  3. Qt事件和信号的区别 .

    仔细来看,事件与信号其实并无多大差别,从我们对其需求上来说,都只要能注册事件或信号响应函数,在事件或信号产生时能够被通知到即可.但有一项区别在于,事件处理函数的返回值是有意义的,我们要根据这个返回值来 ...

  4. pyqt笔记1模块 信号和插槽

    资料 PyQt5图形界面编程 PyQt5指南 模块 PyQt5本身拥有超过620个类和6000函数及方法. QtCore模块涵盖了包的核心的非GUI功能,此模块被用于处理程序中涉及到的 time.文件 ...

  5. Qt事件机制---信号通过事件实现,事件可以过滤,事件更底层,事件是基础,信号是扩展。

    转:http://www.cnblogs.com/findumars/p/8001484.html Qt事件机制(是动作发生后,一种通知对象的消息,是被动与主动的总和.先处理自己队列中的消息,然后再处 ...

  6. Pyqt 控件的信号槽事件定义方法

    转载来自:http://my.oschina.net/midnite/blog/39399 Qt采用信号槽来设定UI界面上元素动作的事件绑定.自Qt4.5开始,引入了一个新的信号槽与事件绑定的方法.界 ...

  7. pyqt重写键盘事件+获取信号发送对象

    # _*_ coding:utf-8 _*_ import sys from PyQt4 import QtGui,QtCore class Example(QtGui.QMainWindow): d ...

  8. PyQt4学习记录之事件和信号

    事件是任何 GUI程序中很重要的部分.所有 Python GUI 应用都是事件驱动的.一个应用对其生命期产生的不同的事件类型做出反应.事件是主要由应用的用户产生.但是,也可以通过其他方法产生,比如,网 ...

  9. PyQt4学习笔记2:事件和信号

    事件是任何 GUI 程序中很重要的部分.所有 GUI 应用都是事件驱动的.一个应用对其生命期产生的不同的事件类型做出反应.事件是主要由应用的用户产生.但是,也可以通过其他方法产生,比如,网络通信,窗口 ...

随机推荐

  1. 2013-05-25 14:04 zend studio10正式版如何汉化?

    选择Help菜单->Install New Software...在Work with框中复制此地 址:http://download.eclipse.org/technology/babel/ ...

  2. Android 编程 AMapLocationClientOption 类中的 setNeedAddress 方法用处 (高德地图 com.amap.api.location.AMapLocationClientOption 中的类)

    最近在用高德地图来写Android App, 其中有一些 方法是不太理解的,这里写一下 对  高德地图  com.amap.api.location.AMapLocationClientOption ...

  3. vue项目更改端口号

    vue项目的默认端口为8080,有时候处于某些原因会造成端口号的冲突,因此需要我们适当的更改其端口号来解决问题,将上图中的port更改为合适的端口号就可以,但是需要注意的是浏览器的安全限制端口号详情见 ...

  4. 【剑指offer】04A二维数组中的查找,C++实现

    1.题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数数组和一个整数,判断数组中是否含有该整数. 2.思路 首先选取数 ...

  5. Percona 工具 pt-query-digest的使用

    pt-query-digest说明 pt-query-digest 用来格式化分析MySQL产生的日志,如:慢查询日志.二进制日志.通用日志,根据不同的条件进行分析并生成报告. pt-query-di ...

  6. Java并发--ConcurrentModificationException(并发修改异常)异常原因和解决方法

    在前面一篇文章中提到,对Vector.ArrayList在迭代的时候如果同时对其进行修改就会抛出java.util.ConcurrentModificationException异常.下面我们就来讨论 ...

  7. BZOJ4517 Sdoi2016 排列计数 【DP+组合计数】*

    BZOJ4517 Sdoi2016 排列计数 Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 ...

  8. Java Garbage Collection

    在C/C++中,需要自己负责object的creation 和 destruction. 如果忘记了destruction, 就容易出现OutOfMemoryErrors. Java中会有GC直接处理 ...

  9. css 2D动画

    2D动画: 通过 CSS3  transform转换,我们能够对元素进行移动.缩放.转动.拉长或拉伸. 2D移动:translate().使用translate()函数,你可以把元素从原来的位置移动. ...

  10. 【java基础】Java运算符优先级

    Java运算符优先级 序列号 符号 名称 结合性(与操作数) 目数 说明 1 . 点 从左到右 双目 ( ) 圆括号 从左到右   [ ] 方括号 从左到右   2 + 正号 从右到左 单目 - 负号 ...