# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtWidgets
class MyWindow(QtWidgets.QWidget):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.label = QtWidgets.QLabel("Hello World!")
self.label.setAlignment(QtCore.Qt.AlignHCenter)
self.btnQuit = QtWidgets.QPushButton("关闭窗口(&C)")
self.vbox = QtWidgets.QVBoxLayout()
self.vbox.addWidget(self.label)
self.vbox.addWidget(self.btnQuit)
self.setLayout(self.vbox)
self.btnQuit.clicked.connect(QtWidgets.qApp.quit)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
window = MyWindow() # 创建窗口类实例
window.setWindowTitle("面向对象编程的窗口创建")
window.resize(300, 70)
window.show() # 显示窗口
sys.exit(app.exec_()) # 进入主循环
1.PyQt的程序结构
第1行:指定程序文件的编码格式。
第2行:载入PyQt5的QtWidgets,QtCore模块,比前面的例子多了QtCore,它包括了Qt类中属性的定义。
第3行:class MyWindow(QtWidgets.QWidget),定义窗口类,该类继承自QWidget
第4行:def init(self, parent=None) : 定义窗口类的构造函数,参数 self为类实例,parent为父类,没有父类时,可将其设为null。
第5行:QtWidgets.QWidget.init (self, parent),构造函数的第1行,调用父类的构造函数。
第6-9行:创建QLabel、QPushButton、QVbox对象为了以后调用方便,这些对象定义为类实例的属性。
第10-11行:将QLabel、QPushButton添加到QVbox容器中
第12行: self.setLayout(self.vbox) 将QVbox容器添加到窗口中
第13行: self.btnQuit.clicked.connect(QtWidgets.qApp.quit),给btnQuit对象的clicked信号句柄赋值,本句中是应用程序的退出函数QtWidgets.qApp.quit),称为槽(slot)。通过QtWidgets的qApp来访问应用程序对象。
第15行: if name == "main" : 文件作为脚本直接运行时,相关的代码才会被执行;当用import导入到其他模块中,则不会。