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函数
这是对继承自父类的属性进行初始化。而且是用父类的初始化方法来初始化继承的属性。
也就是说,子类继承了父类的所有属性和方法,父类属性自然会用父类方法来进行初始化。