前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyQt 编程入门(六.1)

PyQt 编程入门(六.1)

作者头像
用户6021899
发布2019-08-14 17:40:44
4340
发布2019-08-14 17:40:44
举报

上一篇介绍了PyQt预定义信号和预定义槽的连接。本篇讲解如何自定义槽,以及如何向槽传递额外的信号参数。

信号与槽连接的格式为: object.signal.connect(callable)

obeject为QObject任何派生类的实例(比如按钮),signal为object发射的信号(如点击事件clicked),callable为槽函数名(不能带括号,所以不能带参数)。例如:

button.clicked.connect(self.on_clicked)

def on_clicked(self):#在类中为方法,只带一个参数self;否则无参数

#do something

pass

可以为不同的信号编写不同的槽函数。但有时候为了简洁,需要将多个信号连接到同一个槽上,并需要根据连接的不同信号做出不同的响应,但是默认情况下槽函数不能传递参数,该如何做呢?

第一种方法:用 无参的lambda函数调用有参的事件处理函数

格式为: object.signal.connect(lambda :callable(para list))。

示例代码如下:建议在浏览器中打开并横屏观看。

# _*_ coding:utf-8_*_ #向槽函数传递额外参数 import sys from PyQt5.QtGui import * from PyQt5.QtWidgets import *

class MyWidget(QWidget): def __init__(self,parent = None): super().__init__(parent)# self.initUI() def initUI(self): btn1 = QPushButton("Button 1") btn2 = QPushButton("Button 2") self.label =QLabel() self.label.setFrameStyle(QFrame.Panel) layout = QGridLayout() layout.addWidget(btn1,0,0) layout.addWidget(btn2,0,1) layout.addWidget(self.label,1,0,1,2) btn1.clicked.connect(lambda : self.on_clicked(btn1))## btn2.clicked.connect(lambda : self.on_clicked(btn2))## self.setLayout(layout) self.resize(220,80) self.setWindowTitle(u'信号和槽')

def on_clicked(self,button):#带了额外参数## self.label.setText(u"%s 被点击"% button.text()) if __name__== '__main__': app= QApplication(sys.argv) widget= MyWidget() widget.show() #显示到屏幕 sys.exit(app.exec_())

第二种方法:使用偏函数来封装带参数的槽。下面仅列写代码的不同部分。

from functools import partial ## btn1.clicked.connect(partial(self.on_clicked,btn1))## btn2.clicked.connect(partial(self.on_clicked,btn2))##

第三种方法:在槽函数中使用self.sender()得到事件源。下面仅列写代码的不同部分。

btn1.clicked.connect(self.on_clicked)#不带参数 btn2.clicked.connect(self.on_clicked)#不带参数

def on_clicked(self):#不带额外参数## self.label.setText(u"%s 被点击"% self.sender().text())

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档