首先利用Qt Designer設計.ui文件,然后采用Tools->External Tools->PyUIC轉換成.py文件。這個.py文件是.ui文件編譯而來的,將這種文件由.ui文件編譯而來的.py文件稱之為界面文件。由于界面文件每次編譯時候都會初始化,所以需要新建一個.py文件來調用界面文件,這個新建立的.py問稱之為邏輯文件,也可以成為業務文件。
也就是說通過轉換 ui 文件為 py 文件,得到的只是界面的 ui 的類, 并不包括啟動界面的函數,我們稱之為界面文件。需要一個新建一個 py 文件調用文件,這個新建的文件我們稱為邏輯文件。
界面文件和邏輯文件是兩個相對獨立的文件,通過上述方法實現了界面與邏輯的分離。
邏輯文件代碼如下:
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication,QMainWindow
from untitled import Ui_MainWindowclass MyMainForm(QMainWindow, Ui_MainWindow):def __init__(self, parent=None):super(MyMainForm, self).__init__(parent)self.setupUi(self)if __name__ == '__main__':# 每一pyqt5應用程序必須創建一個應用程序對象。sys.argv參數是一個列表,從命令行輸入參數。app = QApplication(sys.argv)myWin = MyMainForm()# 顯示在屏幕上myWin.show()# 系統exit()方法確保應用程序干凈的退出# 的exec_()方法有下劃線。因為執行是一個Python關鍵詞。因此,exec_()代替sys.exit(app.exec_())
界面文件代碼(通過.ui文件轉換的代碼)
# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# 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, QtWidgetsclass Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(690, 399)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget)self.stackedWidget.setGeometry(QtCore.QRect(40, 70, 621, 271))self.stackedWidget.setObjectName("stackedWidget")self.page1 = QtWidgets.QWidget()self.page1.setObjectName("page1")self.stackedWidget.addWidget(self.page1)self.page2 = QtWidgets.QWidget()self.page2.setObjectName("page2")self.stackedWidget.addWidget(self.page2)MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 690, 22))self.menubar.setObjectName("menubar")MainWindow.setMenuBar(self.menubar)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)self.stackedWidget.setCurrentIndex(0)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))