信号槽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. Spring报错:java.io.FileNotFoundException: class path resource [applicationContext.xml] cannot be opened because it does not exist

    感谢:http://blog.chinaunix.net/uid-20681545-id-184633.html提供的解决方案,非常棒 ! 问题说明: 新建一个Spring项目,新建一个Bean类:H ...

  2. getaddrinfo()详解

    IPv4中使用gethostbyname()函数完成主机名到地址解析,但是该API不允许调用者指定所需地址类型的任何信息,返回的结构只包含 了用于存储IPv4地址的空间.为了解决该问题,IPv6中引入 ...

  3. Linux下保存文件

    经常需要dump数据,mark一下 #if 0 FILE * fd = NULL; fd = fopen("/mnt/raw.pcm", "ab+"); if ...

  4. webpy/flask/bottle性能测试

    这三个都是Python WSGI的web开发框架,到底用哪个呢?单纯从性能的角度而言,可能哪个快就用哪个,但是这也不是绝对的.比如我就比较喜欢webpy的router配置放在一个文件中,而flask和 ...

  5. c++语言第二次作业

    一题目7-1统计学生成绩 1实验代码 #include<stdio.h> int main(void) { int i,n,grade,A,B,C,D,E; A=B=C=D=E=; sca ...

  6. 【paper】KDD15 - Interpreting Advertiser Intent in Sponsored Search

    Interpreting Advertiser Intent in Sponsored Search   主要内容是搜索广告的相关性预估模型,使用learning to rank的方法.亮点在于使用了 ...

  7. C# Post发送数据返回页面结果

    public string GetPage(string posturl, string postData) { Stream outstream = null; Stream instream = ...

  8. 每天一个linux命令(文件操作):【转载】find命令之exec

    find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. exec解释: -exec  参数后面跟的是command ...

  9. 《DSP using MATLAB》示例9.1

    前段时间发生许多事,主要是楼盘开发商资金链紧张,无法通过验收,拿不到两书一表(住宅质量保证书.住宅使用说明书.房屋建筑工程竣工验收备案表), 各种配套设施都没有,就在这条件下还强制我们业主收房,心塞, ...

  10. Windows下安装Redis服务,修改查看密码,修改端口,常用命令

    一.安装 出自:https://jingyan.baidu.com/article/0f5fb099045b056d8334ea97.html 1.要安装Redis,首先要获取安装包.Windows的 ...