pyqt5 把.ui文件转换成.py文件 及转换后的使用


首先运行以下代码,它会把当前目录下所有的.ui文件转换成.py文件

import os
import os.path

dir = './'  # 文件所在的路径


# 找出路径下所有的.ui文件
def listUiFile():
    list = []
    files = os.listdir(dir)
    for filename in files:
        # print(filename)
        if os.path.splitext(filename)[1] == '.ui':
            list.append(filename)

    return list


# 把扩展名未.ui的转换成.py的文件
def transPyFile(filename):
    return os.path.splitext(filename)[0] + '.py'


# 通过命令把.ui文件转换成.py文件
def runMain():
    list = listUiFile()
    for uifile in list:
        pyfile = transPyFile(uifile)
        cmd = 'pyuic5 -o {pyfile} {uifile}'.format(pyfile=pyfile, uifile=uifile)
        os.system(cmd)


if __name__ == "__main__":
    runMain()

然后将ui装载进你的主程序

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'MyForm.ui'
#
# Created by: PyQt5 UI code generator 5.9.2
#
# 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(1492, 1097)
        #...以下省略数行    
        #...以下省略数行 
        #...以下省略数行 

import sys

from PyQt5.QtWidgets import QApplication, QWidget

from MyForm import Ui_Form


def main():

    #创建QApplication类的实例
    app = QApplication(sys.argv)
    form = QWidget()
    window = Ui_Form()
    window.setupUi(form)
    form.show()
    sys.exit(app.exec_())
if __name__ == '__main__':

    main()

 main_window.py

# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.setEnabled(True)
        Dialog.resize(400, 280)
        self.gridLayout = QtWidgets.QGridLayout(Dialog)
        self.gridLayout.setObjectName("gridLayout")
        self.lineEdit = QtWidgets.QLineEdit(Dialog)
        font = QtGui.QFont()
        font.setPointSize(17)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        self.lineEdit.setFont(font)
        self.lineEdit.setAutoFillBackground(False)
        self.lineEdit.setStyleSheet("")
        self.lineEdit.setFrame(True)
        self.lineEdit.setDragEnabled(False)
        self.lineEdit.setReadOnly(False)
        self.lineEdit.setCursorMoveStyle(QtCore.Qt.VisualMoveStyle)
        self.lineEdit.setClearButtonEnabled(False)
        self.lineEdit.setObjectName("lineEdit")
        self.gridLayout.addWidget(self.lineEdit, 1, 1, 1, 1)
        spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout.addItem(spacerItem, 0, 1, 1, 1)
        spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout.addItem(spacerItem1, 5, 1, 1, 1)
        spacerItem2 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout.addItem(spacerItem2, 2, 1, 1, 1)
        spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem3, 1, 0, 1, 1)
        spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem4, 1, 2, 1, 1)
        self.pushButton = QtWidgets.QPushButton(Dialog)
        font = QtGui.QFont()
        font.setFamily("黑体")
        font.setPointSize(18)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        self.pushButton.setFont(font)
        self.pushButton.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.pushButton.setAutoFillBackground(False)
        self.pushButton.setStyleSheet("font: 18pt \"黑体\";\n"
                                      "color: rgb(255, 0, 127);")
        self.pushButton.setDefault(False)
        self.pushButton.setFlat(False)
        self.pushButton.setObjectName("pushButton")
        self.gridLayout.addWidget(self.pushButton, 3, 1, 1, 1)
        spacerItem5 = QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem5, 3, 0, 1, 1)
        spacerItem6 = QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem6, 3, 2, 1, 1)

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "猜数字游戏"))
        self.lineEdit.setText(_translate("Dialog", "请输入数字"))
        self.pushButton.setText(_translate("Dialog", "我猜"))

run.py

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from build.main_window import Ui_Dialog
import random
import time


class Dialog(QDialog, Ui_Dialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)    # 这个地方要注意 Ui_Dialog
        self.setupUi(self)
        self.setWindowFlags(Qt.Window)  # 设置窗口最大化最小化
        self.answer = random.randint(0, 100)  # 获得0,100之间的随机整数
        print(self.answer)

    @pyqtSlot()
    def on_pushButton_clicked(self):
        you_guess = self.lineEdit.text()
        if int(you_guess) > self.answer:
            QMessageBox.information(self,
                                    "消息框标题",
                                    "你猜的数大了",
                                    QMessageBox.Yes | QMessageBox.No)
        elif int(you_guess) < self.answer:
            QMessageBox.information(self,
                                    "消息框标题",
                                    "你猜的数小了",
                                    QMessageBox.Yes | QMessageBox.No)
        else:
            QMessageBox.information(self,
                                    "消息框标题",
                                    "恭喜你猜对了!",
                                    QMessageBox.Yes | QMessageBox.No)
            time.sleep(0.3)
            self.close()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    ui = Dialog()
    ui.show()
    sys.exit(app.exec_())
import sys
from testUI import Ui_MainWindow
from PyQt5.QtWidgets import QApplication, QMainWindow,QWidget
class mywindow(QWidget, Ui_MainWindow): # 这个地方要注意Ui_MainWindow def __init__(self): super(mywindow, self).__init__() self.setupUi(self) if __name__ =="__main__": app = QApplication(sys.argv) w = mywindow() w.show() sys.exit(app.exec_())

添加简单功能

import sys
from testUI import Ui_MainWindow
from PyQt5.QtWidgets import QApplication, QMainWindow,QWidget,QMessageBox
class mywindow(QWidget, Ui_MainWindow): # 这个地方要注意Ui_MainWindow def __init__(self): super(mywindow, self).__init__() self.setupUi(self) self.pushButton1.clicked.connect(self.handclick) def handclick(self): QMessageBox.about(self,'1','1') if __name__ =="__main__": app = QApplication(sys.argv) w = mywindow() w.show() sys.exit(app.exec_())

 super(Net, self).__init__()

最近在用pyqt编写桌面应用。发现一个比较拗口的语法点:

class mywindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(mywindow, self).__init__()
        self.setupUi(self)
 
    # 定义槽函数
    def hello(self):
        self.textEdit.setText("hello world")

针对super(mywindow, self).__init__()理解不了。

查询了一下资料瞬间明白了。

python中的super(Net, self).__init__()
 
首先找到Net的父类(比如是类NNet),然后把类Net的对象self转换为类NNet的对象,然后“被转换”的类NNet对象调用自己的init函数

这是对继承自父类的属性进行初始化。而且是用父类的初始化方法来初始化继承的属性。

也就是说,子类继承了父类的所有属性和方法,父类属性自然会用父类方法来进行初始化。

qt5