信号槽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. vue.js 源代码学习笔记 ----- Dep

    /* @flow */ import type Watcher from './watcher' import { remove } from '../util/index' let uid = 0 ...

  2. JDBC的步骤

    使用jdbc步骤 a.导入数据库厂商提供的驱动程序(导入jar包) b.加载驱动程序 Class.forName("驱动程序类") c.获得连接 Connection conn=D ...

  3. 完成users中的models

    用户表中添加邮箱验证码数据表,轮播图数据表 from django.db import models from django.contrib.auth.models import AbstractUs ...

  4. 全新Wijmo5中文学习指南正式上线

    Wijmo 是一款使用 TypeScript 编写的新一代 JavaScript/HTML5 控件集.它秉承触控优先的设计理念,在全球率先支持 AngularJS,并且支持React.VueJS以及T ...

  5. Java堆空间溢出解决方法 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

    一般通过java -jar filename.jar运行jar包,但是当运行的java程序需要较大的内存时,可能会造成堆空间溢出. 例如,加载了几个G大小的json文件,运行报错: Exception ...

  6. C# 加密狗 超级狗 加密程序 程序授权示例 程序授权验证

    本篇针对超级狗进行讲解,对应的超级狗套件的工具包版本为2.4版本.超级狗图片如下: 主要包含两个狗,一个是超级狗,一个是开发狗,在本博文中都是必须的.首先先安装光盘中的开发套间. 接下来就开始演示一个 ...

  7. IE只是开始!

    Study is boring,but devotion make it is easy!

  8. moment时间转换插件

    在vue中的使用: import moment = from “moment” Vue.prototype.$moment = moment; 获取时间戳 : var res = this.$mome ...

  9. silverlight——获取控件相对位置

    事出有因:页面中存在滚动条,然后点击页面按钮时会进行正确性检查,如果出错在控件的位置会出现提示信息,但由于滚动条的出现,有可能在非可视区域内的控件出了问题,但目前是看不见的,因此,考虑获得出问题控件的 ...

  10. Java并发--同步容器

    为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器.并发容器.阻塞队列.Synchronizer(比如CountDownLatch).今天我们就来讨论下同步容器. ...