从多个 类 组成一个 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_())
我在 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_())