从多个 类 组成一个 PyQt5 UI

Compose a PyQt5 UI from multiple classes

我在 QT Designer 中设计了一个 UI。它由三个选项卡组成:

1 - 测试; 2 - 火车哈尔; 3 - 火车猪;

在每个选项卡中,我都有一些按钮、一些行或一些小部件,但是当我创建代码以向这些按钮或小部件添加功能时,我希望每个选项卡都有 3 个 classes,一个 class 仅适用于第一个标签,一个 class 仅适用于第二个标签,依此类推。 第四个 class 调用了所有三个 classes 并编写了我的 UI。我不知道该怎么做,我需要每个 classes 都继承自 QMainWindow?我需要在每个 class?

中设置 Ui

这是我当前的代码:

import sys
from PyQt5 import QtWidgets, QtCore, QtGui
from Qt_designer_UI import Ui_MainWindow

class Test(QtWidgets.QMainWindow):
    def __init__(self):
        super(Test, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

class Train_Haar(QtWidgets.QMainWindow):
    def __init__(self):
        super(Train_Haar, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)


class Train_HOG(QtWidgets.QMainWindow):
    def __init__(self):
        super(Train_HOG, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)


class Compose_UI(QtWidgets.QMainWindow):
    def __init__(self):
        super(Compose_UI, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        Test()
        Train_Haar()
        Train_HOG



if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = Compose_UI()
    window.show()
    sys.exit(app.exec_())

我需要每个 classes 继承自 QMainWindow?

不,没有必要,因为它是一个位于选项卡内的小部件,并且该小部件可以是任何类型。

我需要在每个 class?

中设置 Ui

只有在 pyuic 和 Qt Designer 的帮助下使用生成的 class 时才必须调用 setupUi,在您的情况下,每个选项卡中的小部件都是通过生成的Qt设计师?我看我没有

请记住,您的 .ui 是

一个可能的解决方案是:

import sys
from PyQt5 import QtWidgets, QtCore, QtGui
from Qt_designer_UI import Ui_MainWindow


class Test(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Test, self).__init__(parent)
        # for testing
        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(QtWidgets.QPushButton("Test"))


class Train_Haar(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Train_Haar, self).__init__(parent)
        # for testing
        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(QtWidgets.QPushButton("Train_Haar"))


class Train_HOG(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Train_HOG, self).__init__(parent)
        # for testing
        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(QtWidgets.QPushButton("Train_HOG"))


class Compose_UI(QtWidgets.QMainWindow):
    def __init__(self):
        super(Compose_UI, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        test = Test()
        train_haar = Train_Haar()
        train_hog = Train_HOG()

        for w, tab in zip(
            (test, train_haar, train_hog), (self.ui.tab1, self.ui.tab2, self.ui.tab3)
        ):
            lay = QtWidgets.QVBoxLayout(tab)
            lay.addWidget(w)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = Compose_UI()
    window.show()
    sys.exit(app.exec_())