当我们关闭一个应用时,最常用的方式可能是点击窗口右上方的 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_())
通过以上的代码,我们创建了一个退出按钮,按下这个按钮程序就会自动结束。
from PyQt5.QtCore import QCoreApplication
要使用quit
首先要调用QCoreApplication
qtn = QPushButton('Quit', self)
创建一个按钮,qtn
是QPushButton
类的一个实例,QPushButton
的第一个参数是按钮上的文字,第二个参数指明这个按钮的父部件,在这里是Exp
。
qtn.clicked.connect(QCoreApplication.quit)
Qt 也好,Pyqt 也好,处理事件的核心机制都是信号槽。当我们按下这个按钮时,就释放了clicked
这个信号,槽可以是 Qt 或者 Python(只要能调用就行)。QCoreApplication
包含了主要的事件循环,它可以处理传递任何事件。clicked
信号连接了quit
这个方法,从而结束进程。
整个过程由两个对象完成,发射器和接收器,按钮是发射器,这个应用是接收器。