前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[PyQt Tutorial]5.Signals & Slots(信号与槽)

[PyQt Tutorial]5.Signals & Slots(信号与槽)

作者头像
bsbforever
发布2020-08-19 10:52:02
5580
发布2020-08-19 10:52:02
举报
文章被收录于专栏:时悦的学习笔记

接下来这个专题介绍PyQt的一些内容

教程翻译自:

https://www.tutorialspoint.com/pyqt/pyqt_introduction.htm

由于本人也是学习状态,翻译可能不准确,请及时指出,我会很快修正

一些关键字会直接使用英文

目前该专题为纯理论,实际操作在完成后有演示

PyQt版本: PyQt4

什么是信号与槽

不像终端程序那样的顺序执行程序,GUI程序可以以事件驱动的,函数和方法可以被用来响应用户的行为,像是点击一个按钮,选择一个复选框等

每个PyQt Widget(由QObject 类继承而来)可以被用作于这些事件的源,即发出一个或多个'信号'(signal),譬如点击,勾选

信号本身并不会做任何的动作,它会和一个槽(Slot)进行连接,槽可以调用Python程序.

如何连接

我们有如下2个方式进行Signal和Slot的连接

代码语言:javascript
复制
QtCore.QObject.connect(widget, QtCore.SIGNAL(‘signalname’), slot_function)
代码语言:javascript
复制
widget.signal.connect(slot_function)

这里我们假设当我们点击(clicked)一个按钮(button)是触发一个函数(slot_function)

可以有如下两种写法

代码语言:javascript
复制
QtCore.QObject.connect(button, QtCore.SIGNAL(“clicked()”), slot_function)

button.clicked.connect(slot_function)

连接案例

我们假设有b1 b2 两个 QPushButton 在QDialog窗体上,当我们点击b1 b2两个按钮时调用b1_clicked() 和 b2_clicked()两个函数

我们可以这么写

代码语言:javascript
复制
b1.clicked.connect(b1_clicked())
When b2 is clicked, the clicked() signal is connected to b2_clicked() function

QObject.connect(b2, SIGNAL("clicked()"), b2_clicked)

全部代码如下

代码语言:javascript
复制
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

def window():
   app = QApplication(sys.argv)
   win = QDialog()
   b1 = QPushButton(win)
   b1.setText("Button1")
   b1.move(50,20)
   b1.clicked.connect(b1_clicked)

   b2 = QPushButton(win)
   b2.setText("Button2")
   b2.move(50,50)
   QObject.connect(b2,SIGNAL("clicked()"),b2_clicked)

   win.setGeometry(100,100,200,100)
   win.setWindowTitle("PyQt")
   win.show()
   sys.exit(app.exec_())

def b1_clicked():
   print "Button 1 clicked"

def b2_clicked():
   print "Button 2 clicked"

if __name__ == '__main__':
   window()

执行结果

执行和如下图:

点击按钮后输出

代码语言:javascript
复制
Button 1 clicked
Button 2 clicked
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 宅必备 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是信号与槽
  • 如何连接
  • 连接案例
  • 执行结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档