【Python开发技术之PyQt5精品教学】第6课--PyQt5 信号和槽

PyQt5 信号和槽

与顺序执行的控制台模式应用程序不同,基于GUI的应用程序是事件驱动的。函数或方法按照用户的操作(例如点击按钮、从集合中选择项目或点击鼠标等)来执行,这些操作被称为 事件 。

用于构建GUI界面的小部件充当这些事件的来源。每个PyQt小部件都是从QObject类派生而来,设计为响应一个或多个事件而发出 信号 。信号本身不执行任何操作,而是与一个  连接。槽可以是任何可调用的Python函数。

使用Qt Designer的信号/槽编辑器

首先设计一个带有LineEdit控件和PushButton的简单表单。

PyQt5 信号和槽

如果按下按钮,则希望清空文本框的内容。QLineEdit小部件具有clear()方法来实现此目的。因此,按钮的 clicked 信号将连接到文本框的 clear() 方法。

首先,从编辑菜单中选择编辑信号/槽(或按下F4)。然后用鼠标突出显示按钮,并将光标拖向文本框。

PyQt5 信号和槽

当鼠标释放时,会显示一个对话框,其中显示按钮的信号和槽的方法。选择clicked信号和clear()方法。

PyQt5 信号和槽

底部右侧的信号/插槽编辑器窗口将显示结果 –

PyQt5 信号和槽

从ui文件中保存ui并构建和Python代码,如下所示的代码−

pyuic5 -x signalslot.ui -o signalslot.py

生成的Python代码将通过以下语句来建立信号和槽之间的连接:−

self.pushButton.clicked.connect(self.lineEdit.clear)

Python

Copy

运行 signalslot.py,并在 LineEdit 中输入一些文本。如果按下按钮,文本将被清除。

建立信号槽连接

您可以直接使用下面的语法建立信号槽连接,而无需使用 Designer:

widget.signal.connect(slot_function)

Python

Copy

假设当点击按钮时要调用一个函数。这里,点击信号要连接到一个可调用的函数。可以通过以下任一技术来实现-

button.clicked.connect(slot_function)

Python

Copy

示例

在下面的示例中,我们在QDialog窗口中添加了两个QPushButton对象(b1和b2)。我们希望在点击b1和b2时分别调用函数b1_clicked()和b2_clicked()。

当点击b1时,将clicked()信号连接到b1_clicked()函数−

b1.clicked.connect(b1_clicked())

Python

Copy

当点击b2按钮时,会将clicked()信号连接到b2_clicked()函数。

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets 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)
   b2.clicked.connect(b2_clicked)

   win.setGeometry(100,100,200,100)

   win.setWindowTitle("PyQt5")
   win.show()
   sys.exit(app.exec_())

def b1_clicked():
   print ("Button 1 clicked")

def b2_clicked():
   print ("Button 2 clicked")

if __name__ == '__main__':
   window()

上述代码生成以下输出:

PyQt5 信号和槽

输出

Button 1 clicked
Button 2 clicked
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青少年编程作品集

你的赞赏将带来极佳的运气和才气

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值