Diseño de ventanas múltiples de pyqt (implementación de 2 pasos, enseñanza boca a boca, copia del código fuente disponible)

Este artículo cubre: PyQt5, Qt Designer, PyCharm

 

Tabla de contenido

Primer vistazo al efecto terminado :

Paso 1: Crea 2 formularios con Qt Designer

Paso 2: asociar el subformulario con el control de botón en el formulario principal

código completo


Primer vistazo al efecto final: 

        En el video, solo diseñé 1 ventana principal y 1 subventana. No importa cuántas subventanas necesites, el método de creación es el mismo. Permítanme presentarles el método de implementación específico.


Paso 1: Crea 2 formularios con Qt Designer

        Abra Qt Designer, cree directamente dos formularios de ventana principal a la vez y luego coloco un control de botón en el medio del formulario principal, como se muestra en la figura a continuación:

         Luego guarde los archivos .ui de los dos formularios en la misma carpeta. Nota: Al guardar, debe colocar el foco del mouse en el formulario que se guardará por separado y guardar cada formulario por separado, y al convertir el archivo .ui en un archivo .py, también debe seleccionar cada archivo .ui por separado. convertido por separado, como se muestra en la siguiente figura después de la finalización:


Paso 2: asociar el subformulario con el control de botón en el formulario principal

        Primero observe el archivo untitled2.py. En el código convertido automáticamente, la clase de objeto se hereda de manera predeterminada. El código es el siguiente:

class Ui_MainWindow(object):

        Para realizar operaciones de ventana, la clase de objeto heredada debe modificarse a la clase QMainWindow. Dado que la clase QMainWindow se encuentra en el módulo PyQt5.QtWidgets, debe importarse. El código modificado es el siguiente:

from PyQt5.QtWidgets import QMainWindow

class Ui_MainWindow(QMainWindow):

        Después de modificar la clase de herencia en el archivo .py del subformulario, abra el archivo de formulario principal untitled.py En este archivo, primero defina una función de ranura para usar el método show() del objeto QMainWindow para abrir el subformulario. como a continuación:

        

    def open(self):                                # 创建1个自定义函数open打开子窗体
        import untitled2                           # 导入子窗体
        self.second = untitled2.Ui_MainWindow()    # 引用子窗体,并命名为second
        self.second.resize(736, 467)               # 初始化子窗体大小
        self.second.setWindowTitle("这是子窗体")    # 初始化子窗体的标题
        self.second.show()                         # 显示子窗体

        A continuación, asocie la señal clicked() del botón PushButton con la función de ranura personalizada open(), el código es el siguiente:

self.pushButton.clicked.connect(self.open)

        Ejecute el formulario principal untitled.py y haga clic en el botón para abrir el subformulario.


código completo

        Si no está claro, puede echar un vistazo al código fuente a continuación.

        Código fuente del formulario principal (untitled.py):

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(750, 500)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(190, 140, 291, 81))
        self.pushButton.setObjectName("pushButton")

        # 将按钮和显示第2个窗口的自定义函数关联
        self.pushButton.clicked.connect(self.open)

        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "打开新窗口"))

    def open(self):                                     # 创建1个自定义函数open打开子窗体
        import untitled2                                # 导入子窗体
        self.second = untitled2.Ui_MainWindow()         # 引用子窗体,并命名为second
        self.second.resize(736, 467)                    # 初始化子窗体大小
        self.second.setWindowTitle("这是子窗体")         # 初始化子窗体的标题
        self.second.show()                              # 显示子窗体

import sys
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

        Código fuente del subformulario (untitled2.py):

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow

class Ui_MainWindow(QMainWindow):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(736, 467)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

def __init__(self):
    super(Ui_MainWindow, self).__init__()
    self.setupUi(self)

El clima es frío y las manos están frías, y el código no es fácil. Espero que todos los que lean el oficial hagan clic y presten atención. Estoy agradecido ~~~

Supongo que te gusta

Origin blog.csdn.net/weixin_53989417/article/details/127222824
Recomendado
Clasificación