「PyQt5」2. QPushButton 的 signals 和 slots

简述Graphical Application是事件驱动型的,和控制台或终端程序不同。所谓事件,就是诸如点击按钮、选择多选框中一条选项这样的用户行为。本文记录了QPushButtonsignalsslots用法。


1 名词解释

  • signal翻译为信号,指事件发生时PyQt5 widget发送的信号。
  • slot:翻译为槽(奇奇怪怪),是任何可调用的函数或方法。

  对于QPushButton来说,signal是点击按钮时QPushButton发送的Clicked()信号,slot可以是自己编写的可调用函数/方法,也可以是PyQt5自有的函数/方法。

2 QPushButton的signals

  QPushButton具有如下signal:

  • clicked():This signal is emitted when the button is activated (i.e., pressed down then released while the mouse cursor is inside the button), when the shortcut key is typed, or when click() or animateClick() is called. Notably, this signal is not emitted if you call setDown(), setChecked() or toggle().
  • pressed():This signal is emitted when the button is pressed down.
  • released():This signal is emitted when the button is released.
  • toggled():This signal is emitted whenever a checkable button changes its state.
  • destroyed():类被摧毁,信号不可阻断。
  • objectNameChanged():类名变化。

  前四者继承自PyQt5.QtWidgets.QWidget.QAbstractButton,后二者继承自PyQt5.QtCore.QObject

3 实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# coding=utf-8

import sys
from PyQt5.QtWidgets import (QWidget, QPushButton, QApplication,
QLabel, QGridLayout)
from PyQt5.QtCore import Qt


class Exmaple(QWidget):
def __init__(self):
super().__init__()

self.setup_ui()

def setup_ui(self):
self.btn = QPushButton('Click me')
self.btn.clicked.connect(self.prt) # 链接signal与slot
self.lbl = QLabel()

self.grid = QGridLayout()
self.grid.addWidget(self.btn, 1, 0)
self.grid.addWidget(self.lbl, 2, 0)

self.setLayout(self.grid)
self.grid.setSpacing(20) # 控件与控件、控件与窗口边界之间的留白
self.setWindowTitle('Example')
self.show()

def prt(self):
self.lbl.setText('Clicked!')
self.lbl.setAlignment(Qt.AlignCenter)


if __name__ == "__main__":
app = QApplication(sys.argv)
ex = Exmaple()
sys.exit(app.exec_())

  self.btn.clicked.connect(self.prt)clicked()与处理程序prt()链接起来,其中,clicked()signalprt()slot。除此之外,还有另外一种链接办法:

1
PyQt5.QtCore.QObject.connect(widget, QtCore.SIGNAL(‘signalname’), slot_function)

**以上!**

「PyQt5」2. QPushButton 的 signals 和 slots

https://alexinst.github.io/Python/PyQt5/signals-and-slots-of-button/

作者

Alex

发布于

2018-06-17

更新于

2021-06-19

许可协议

评论