使用pyqt ui转py调用详解及主窗口美化
主要使用python编程的朋友,可能会扩展使用qtdesigner进行界面编辑,本文主要详解ui转py调用及主窗口美化。
一、新建窗体
使用qtdesigner新建窗体,选择widget(图1)。
拖3个pushbutton到右侧(图2)
使用pycharm转为py,如下:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'test.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(400, 300)
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(310, 10, 75, 23))
self.pushButton.setText("")
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(Form)
self.pushButton_2.setGeometry(QtCore.QRect(220, 10, 75, 23))
self.pushButton_2.setText("")
self.pushButton_2.setObjectName("pushButton_2")
self.pushButton_3 = QtWidgets.QPushButton(Form)
self.pushButton_3.setGeometry(QtCore.QRect(130, 10, 75, 23))
self.pushButton_3.setText("")
self.pushButton_3.setObjectName("pushButton_3")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
二、调用原理
注意看ui转的py,Ui_Form(object)只有setupUi(self, Form)、retranslateUi(self, Form)两个函数,并没有继承QmainWindow()类,所以不能使用ui=Ui_Form()直接实例化窗口,先使用window = QMainWindow()实例化窗口,而后使用setupUi()函数将Ui_Form类设计的界面初始化到窗口。当然别忘了from PyQt5.QtWidgets import *,import sys。
if __name__ == '__main__':
# 初始化app,每一个pyqt程序中都需要有一个QApplication对象,sys.argv是一个命令行参数列表
app = QtWidgets.QApplication(sys.argv)
# 创建主窗口,实例化窗口,是基类QMainWindow。
window = QMainWindow()
#创建UI界面
ui = Ui_Form()
#初始化UI到主窗口,主要是建立代码与ui之间的signal与slot
ui.setupUi(window)
#窗口显示
window.show()
# 进入程序的主循环,遇到退出情况,终止程序
sys.exit(app.exec_())
当然可以增加一个类MainWindow(QMainWindow)继承QMainWindow类,应该好理解点,,增加了一个类,只是在调用函数上稍作修改。如下:
--snip--
Form.setWindowTitle(_translate("Form", "Form"))
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
# =号后边是继承了QMainWindow的类,注意观察没有class MainWindow()类时调用的区别,少了一个Q。
window