当我们关闭一个应用时,最常用的方式可能是点击窗口右上方的 X,但其实我们也可以设置一个退出按钮来实现这个功能。这里用到了信号和槽的概念,也是
Qt
最核心的机制,在以后的笔记中会详细解释。
本文由 Cescfangs 译自 ZetCode pyqt5系列教程 并作适当修改。我们会用到下面的构造函数来创建一个
QpushButton
:QPushButton(string text, QWidget parent = None)
text
将会显示在按钮上,我们把按钮放在parent
这个父部件上,在这个 App 里用的是Qwidget
,大多数部件都是继承自父部件而来的,但有些部件没有父部件,这些就是顶级窗口。以下是源代码:
import sys from PyQt5.QtWidgets import QWidget, QPushButton, QApplication from PyQt5.QtCore import QCoreApplication class Exp(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): qtn = QPushButton('Quit', self) qtn.resize(qtn.sizeHint()) qtn.clicked.connect(QCoreApplication.quit) qtn.move(40, 50) self.setGeometry(200, 300, 400, 400) self.setWindowTitle('Quit') self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Exp() sys.exit(app.exec_())
通过以上的代码,我们创建了一个退出按钮,按下这个按钮程序就会自动结束。
qtn = QPushButton('Quit', self)
创建一个按钮,
qtn
是QPushButton
类的一个实例,QPushButton
的第一个参数是按钮上的文字,第二个参数指明这个按钮的父部件,在这里是Exp
。qtn.clicked.connect(QCoreApplication.quit)
Qt 也好,Pyqt 也好,处理事件的核心机制都是信号槽。当我们按下这个按钮时,就释放了
clicked
这个信号,槽可以是 Qt 或者 Python(只要能调用就行)。QCoreApplication
包含了主要的事件循环,它可以处理传递任何事件。clicked
信号连接了quit
这个方法,从而结束进程。
整个过程由两个对象完成,发射器和接收器,按钮是发射器,这个应用是接收器。