11. PyQt5 GUI 项目程序框架

1. 批处理文件uic.bat

echo off
rem 将子目录 QtApp下的.ui文件复制到当前目录下
copy .\QtApp\Dialog.ui Dialog.ui
rem 用pyuic5编译.ui文件
pyuic5 -o ui_Dialog.py Dialog.ui
View Code

- rem 表示注释

2. 窗体界面文件

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

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(451, 317)
        self.verticalLayout = QtWidgets.QVBoxLayout(Dialog)
        self.verticalLayout.setContentsMargins(11, 11, 11, 11)
        self.verticalLayout.setSpacing(6)
        self.verticalLayout.setObjectName("verticalLayout")
        self.groupBox = QtWidgets.QGroupBox(Dialog)
        self.groupBox.setObjectName("groupBox")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.groupBox)
        self.horizontalLayout_2.setContentsMargins(11, 11, 11, 11)
        self.horizontalLayout_2.setSpacing(6)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.chkBoxItalic = QtWidgets.QCheckBox(self.groupBox)
        self.chkBoxItalic.setObjectName("chkBoxItalic")
        self.horizontalLayout_2.addWidget(self.chkBoxItalic)
        self.chkBoxUnder = QtWidgets.QCheckBox(self.groupBox)
        self.chkBoxUnder.setObjectName("chkBoxUnder")
        self.horizontalLayout_2.addWidget(self.chkBoxUnder)
        self.chkBoxBold = QtWidgets.QCheckBox(self.groupBox)
        self.chkBoxBold.setObjectName("chkBoxBold")
        self.horizontalLayout_2.addWidget(self.chkBoxBold)
        self.verticalLayout.addWidget(self.groupBox)
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setObjectName("label")
        self.verticalLayout.addWidget(self.label)
        self.lineEdit = QtWidgets.QLineEdit(Dialog)
        self.lineEdit.setObjectName("lineEdit")
        self.verticalLayout.addWidget(self.lineEdit)
        self.groupBox_2 = QtWidgets.QGroupBox(Dialog)
        self.groupBox_2.setObjectName("groupBox_2")
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.groupBox_2)
        self.horizontalLayout_3.setContentsMargins(11, 11, 11, 11)
        self.horizontalLayout_3.setSpacing(6)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.radioBlue = QtWidgets.QRadioButton(self.groupBox_2)
        self.radioBlue.setObjectName("radioBlue")
        self.horizontalLayout_3.addWidget(self.radioBlue)
        self.radioRed = QtWidgets.QRadioButton(self.groupBox_2)
        self.radioRed.setObjectName("radioRed")
        self.horizontalLayout_3.addWidget(self.radioRed)
        self.radioBlack = QtWidgets.QRadioButton(self.groupBox_2)
        self.radioBlack.setObjectName("radioBlack")
        self.horizontalLayout_3.addWidget(self.radioBlack)
        self.verticalLayout.addWidget(self.groupBox_2)
        self.textEdit = QtWidgets.QPlainTextEdit(Dialog)
        font = QtGui.QFont()
        font.setPointSize(20)
        font.setBold(True)
        font.setWeight(75)
        self.textEdit.setFont(font)
        self.textEdit.setPlaceholderText("")
        self.textEdit.setObjectName("textEdit")
        self.verticalLayout.addWidget(self.textEdit)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setSpacing(6)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.btnClear = QtWidgets.QPushButton(Dialog)
        self.btnClear.setObjectName("btnClear")
        self.horizontalLayout.addWidget(self.btnClear)
        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem)
        self.btnClose = QtWidgets.QPushButton(Dialog)
        self.btnClose.setObjectName("btnClose")
        self.horizontalLayout.addWidget(self.btnClose)
        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem1)
        self.btnOK = QtWidgets.QPushButton(Dialog)
        self.btnOK.setObjectName("btnOK")
        self.horizontalLayout.addWidget(self.btnOK)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.label.setBuddy(self.lineEdit)

        self.retranslateUi(Dialog)
        self.btnOK.clicked.connect(Dialog.accept)
        self.btnClose.clicked.connect(Dialog.reject)
        QtCore.QMetaObject.connectSlotsByName(Dialog)
        Dialog.setTabOrder(self.chkBoxItalic, self.chkBoxUnder)
        Dialog.setTabOrder(self.chkBoxUnder, self.chkBoxBold)
        Dialog.setTabOrder(self.chkBoxBold, self.radioBlue)
        Dialog.setTabOrder(self.radioBlue, self.radioRed)
        Dialog.setTabOrder(self.radioRed, self.radioBlack)
        Dialog.setTabOrder(self.radioBlack, self.textEdit)
        Dialog.setTabOrder(self.textEdit, self.btnClear)
        Dialog.setTabOrder(self.btnClear, self.btnClose)
        Dialog.setTabOrder(self.btnClose, self.btnOK)
        Dialog.setTabOrder(self.btnOK, self.lineEdit)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "信号与槽"))
        self.groupBox.setTitle(_translate("Dialog", "GroupBox"))
        self.chkBoxItalic.setText(_translate("Dialog", "Italic"))
        self.chkBoxUnder.setText(_translate("Dialog", "UnderLine"))
        self.chkBoxBold.setText(_translate("Dialog", "Bold"))
        self.label.setText(_translate("Dialog", "TextLabel"))
        self.groupBox_2.setTitle(_translate("Dialog", "GroupBox"))
        self.radioBlue.setText(_translate("Dialog", "Blue"))
        self.radioRed.setText(_translate("Dialog", "Red"))
        self.radioBlack.setText(_translate("Dialog", "Black"))
        self.textEdit.setPlainText(_translate("Dialog", "PyQt5编程指南\n"
"Python和Qt"))
        self.btnClear.setText(_translate("Dialog", "清空"))
        self.btnClose.setText(_translate("Dialog", "退出"))
        self.btnOK.setText(_translate("Dialog", "确定"))
View Code

- 任务:界面创建和信号与槽函数的关联

- 界面创建

  - groupBox是布局管理组件[groupBox = QtWidgets.QGroupBox(Dialog)],父容器是Dialog

  - horizontalLayout_2是创建的水平布局[horizontalLayout_2 = QtWidgets.QHBoxLayout(self.groupBox)],父容器是groupBox

- 信号与槽关联

  - self.btnOK.clicked.connect(Dialog.accept)  btnOK按钮的clicked信号与accept()函数关联

  - self.btnClose.clicked.connect(Dialog.reject)  btnClose按钮的clicked信号与reject()函数关联

  - 信号与槽函数关联使用connect()函数

  - 发射信号对象.信号.connect(接收信号对象.槽函数名称)

3. 窗体业务逻辑类文件

# 与UI窗体类对应的业务逻辑类
import sys
from PyQt5.QtWidgets import QApplication, QDialog
from ui_Dialog import Ui_Dialog


class QmyDialog(QDialog):
    def __init__(self,parent=None):
        super().__init__(parent)        #调用父类构造函数创建窗体
        self.ui = Ui_Dialog()           #创建UI对象
        self.ui.setupUi(self)           #构造Ui


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainform = QmyDialog()
    mainform.show()
    sys.exit(app.exec_())
View Code

4. 建议单独编写主程序文件

import sys
from PyQt5.QtWidgets import QApplication
from myDialog import QmyDialog


app =QApplication(sys.argv)     #创建GUI应用程序
mainform = QmyDialog()          #创建主窗体
mainform.show()                 #显示主窗体
sys.exit(app.exec_())
View Code

 

posted @ 2020-12-02 10:40  GOgo学习  阅读(668)  评论(0)    收藏  举报