了解Qt Designer并设计第一个主窗口,转换为.py脚本后运行显示窗口。
在Pycharm菜单栏中展开Tools—External Tools中提前配置的Qt Designer(或打开提前发送到桌面的designer.exe),显示出“新建窗体”(如图),其中Main Window窗口是PyQt5设计GUI程序时最常用的窗口,PyQt5从入门到实践这本书的所有案例都以创建Main Window窗口为基础进行展开。
新建窗体中选择Main Window即可创建第一个主窗口,Qt Designer设计器的几个主要组成部分如图。
菜单栏和工具栏为中文不作详细说明;
工具栏是设计时最常用的部分,需要哪个控件直接拖动到窗口设计区域即可(这部分控件较多不一一展开,后续根据需求进行使用);
对象查看器用来查看设计窗口放置的对象列表;属性编辑器可对窗口(中的对象)控件和布局等属性进行修改和设置;资源浏览器中可为控件添加图片,图标等资源。
(1) 同1中,打开Qt Designer—新建窗体(选择Main Window)—创建;
(2)主窗口默认只有一个菜单栏和一个状态栏,本例中随机拖动一个Push Button和RadioButton到窗口进行练习,按Ctrl+R可预览窗口效果;
(3) 保存.ui文件到指定位置(Qt Designer设计完默认为.ui格式);
(4) .ui文件转换为.py文件:在Pycharm的项目导航窗口中选择保存的.ui文件,选择菜单栏—Tools—External Tools—PyUIC菜单,即可生成与.ui命名相同的.py文件(文件默认命名为“untitled”,可自行修改);
(5)运行主窗口,转换成功的.py脚本文件夹没有程序入口还不能运行,因此需要通过判断名称是否为__main__来设置程序入口,并通过MainWindow对象的show()函数来显示,代码如下:
import sys
#程序入口,程序从此处启动PyQt设计的窗体
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow() #创建窗体对象
ui = Ui_MainWindow() #创建PyQt设计的窗体主体
ui.setupUi(MainWindow) #调用PyQt窗体的方法对窗体对象进行初始化设置
MainWindow.show() #显示窗体
app.exit(app.exec_()) #程序关闭时退出程序
运行.py即可显示第一个窗口程序
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(417, 322)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(210, 110, 91, 31))
self.pushButton.setObjectName("pushButton")
self.radioButton = QtWidgets.QRadioButton(self.centralwidget)
self.radioButton.setGeometry(QtCore.QRect(90, 110, 91, 31))
self.radioButton.setObjectName("radioButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 417, 27))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "PushButton"))
self.radioButton.setText(_translate("MainWindow", "RadioButton"))
#程序入口,程序从此处启动PyQt设计的窗体
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow() #创建窗体对象
ui = Ui_MainWindow() #创建PyQt设计的窗体主体
ui.setupUi(MainWindow) #调用PyQt窗体的方法对窗体对象进行初始化设置
MainWindow.show() #显示窗体
app.exit(app.exec_()) #程序关闭时退出程序