Как применить объектно-ориентированную концепцию к 2 подобным страницам qt-дизайнера - PullRequest
0 голосов
/ 01 октября 2019

Как применить объектно-ориентированное понятие в python к страницам пользовательского интерфейса, созданным Qt-дизайнером?

Я использовал Qt-дизайнер для создания 2 экранов Dog и Cat. Они очень похожи, за исключением того, что на изображении каждой страницы показана собака или кошка, а на странице «Собака» есть 1 дополнительная кнопкаЗатем я использую pyside2-uic для создания пользовательского интерфейса в файлах python. Добавив объект пользовательского интерфейса в параметр класса Dog или Cat, я могу успешно запускать каждый из них по отдельности. Тем не менее, это не код многократного использования. Я хотел бы создать общий объект "Animal" и загрузить страницу пользовательского интерфейса в зависимости от его конфигурации.

from PySide2 import QtWidgets, QtGui
from demo.ui import page1


class Dog(page1.Ui_MainWindow, QtWidgets.QMainWindow):
    def __init__(self):
        super(Dog, self).__init__()
        self.setupUi(self)

        self.button1.clicked.connect(self.func1)
        self.button2.clicked.connect(self.func2)
        self.buttonDogOnly.clicked.connect(self.dogOnly)
        self.cancelButton.clicked.connect(self.cancelfunc)

    def func1(self):
        self.textEdit.append("This is button 1")
        QtWidgets.QMessageBox.about(self, "popup", "BUTTON 1")
        QtGui.qApp.processEvents()
        self.update()

    def func2(self):
        self.textEdit.append("This is button 2")
        QtWidgets.QMessageBox.about(self, "popup", "BUTTON 2")
        QtGui.qApp.processEvents()
        self.update()

    def dogOnly(self):
        self.textEdit.append("Dog only button")
        QtWidgets.QMessageBox.about(self, "popup", "Dog only button")
        QtGui.qApp.processEvents()
        self.update()

    def cancelfunc(self):
        self.textEdit.append("This is CANCEL BUTTON")
        QtWidgets.QMessageBox.about(self, "popup", "CANCEL BUTTON")
        QtGui.qApp.processEvents()
        self.update()

if __name__ == '__main__':
    app = QtWidgets.QApplication()
    homepage = Dog()
    homepage.show()
    app.exec_()

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

# Form implementation generated from reading ui file 'demo/ui/page1.ui',
# licensing of 'demo/ui/page1.ui' applies.
#
# Created: Mon Sep 30 16:38:55 2019
#      by: pyside2-uic  running on PySide2 5.12.1
#
# WARNING! All changes made in this file will be lost!

from PySide2 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(890, 755)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setGeometry(QtCore.QRect(0, 0, 861, 701))
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.frame_2 = QtWidgets.QFrame(self.frame)
        self.frame_2.setGeometry(QtCore.QRect(10, 310, 321, 381))
        self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_2.setObjectName("frame_2")
        self.button1 = QtWidgets.QPushButton(self.frame_2)
        self.button1.setGeometry(QtCore.QRect(20, 20, 121, 31))
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(11)
        font.setWeight(75)
        font.setBold(True)
        self.button1.setFont(font)
        self.button1.setAutoFillBackground(True)
        self.button1.setStyleSheet("")
        self.button1.setObjectName("button1")
        self.button2 = QtWidgets.QPushButton(self.frame_2)
        self.button2.setGeometry(QtCore.QRect(170, 20, 121, 31))
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(11)
        font.setWeight(75)
        font.setBold(True)
        self.button2.setFont(font)
        self.button2.setAutoFillBackground(True)
        self.button2.setStyleSheet("")
        self.button2.setObjectName("button2")
        self.cancelButton = QtWidgets.QPushButton(self.frame_2)
        self.cancelButton.setGeometry(QtCore.QRect(20, 70, 121, 31))
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(11)
        font.setWeight(75)
        font.setBold(True)
        self.cancelButton.setFont(font)
        self.cancelButton.setAutoFillBackground(True)
        self.cancelButton.setStyleSheet("")
        self.cancelButton.setObjectName("cancelButton")
        self.buttonDogOnly = QtWidgets.QPushButton(self.frame_2)
        self.buttonDogOnly.setGeometry(QtCore.QRect(170, 70, 121, 31))
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(11)
        font.setWeight(75)
        font.setBold(True)
        self.buttonDogOnly.setFont(font)
        self.buttonDogOnly.setAutoFillBackground(True)
        self.buttonDogOnly.setStyleSheet("")
        self.buttonDogOnly.setObjectName("buttonDogOnly")
        self.frame_3 = QtWidgets.QFrame(self.frame)
        self.frame_3.setGeometry(QtCore.QRect(340, 10, 511, 681))
        self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_3.setObjectName("frame_3")
        self.textEdit = QtWidgets.QTextEdit(self.frame_3)
        self.textEdit.setGeometry(QtCore.QRect(10, 10, 491, 661))
        self.textEdit.setObjectName("textEdit")
        self.frame_4 = QtWidgets.QFrame(self.frame)
        self.frame_4.setGeometry(QtCore.QRect(10, 10, 321, 291))
        self.frame_4.setAutoFillBackground(False)
        self.frame_4.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_4.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_4.setObjectName("frame_4")
        self.dogLabel = QtWidgets.QLabel(self.frame_4)
        self.dogLabel.setGeometry(QtCore.QRect(10, 10, 301, 271))
        self.dogLabel.setAutoFillBackground(False)
        self.dogLabel.setStyleSheet("image:url(:/animals/dog.png)")
        self.dogLabel.setText("")
        self.dogLabel.setObjectName("dogLabel")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar()
        self.menubar.setGeometry(QtCore.QRect(0, 0, 890, 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)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QtWidgets.QApplication.translate("MainWindow", "MainWindow", None, -1))
        self.button1.setText(QtWidgets.QApplication.translate("MainWindow", "Button 1", None, -1))
        self.button2.setText(QtWidgets.QApplication.translate("MainWindow", "Button 2", None, -1))
        self.cancelButton.setText(QtWidgets.QApplication.translate("MainWindow", "Cancel", None, -1))
        self.buttonDogOnly.setText(QtWidgets.QApplication.translate("MainWindow", "Dog only", None, -1))

import demo.images_rc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...