从多个类组成 PyQt5 UI
Posted
技术标签:
【中文标题】从多个类组成 PyQt5 UI【英文标题】:Compose a PyQt5 UI from multiple classes 【发布时间】:2019-07-20 16:54:06 【问题描述】:我有一个在 QT Designer 中设计的 UI。它由三个选项卡组成:
1 - 测试; 2 - 训练哈尔; 3 - 训练猪;
在每个选项卡中,我都有一些按钮、一些行或一些小部件,但是当我创建代码以向这些按钮或小部件添加功能时,我希望每个选项卡都有 3 个类,一个类仅用于第一个选项卡,一类仅用于第二个选项卡,依此类推.. 第四类调用所有三个类并编写我的 UI。我不知道该怎么做,我需要每个类都继承自 QMainWindow?我需要在每个班级都设置 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_())
【问题讨论】:
【参考方案1】:我需要每个类都继承自 QMainWindow?
不,没有必要,因为它是一个将在选项卡内的小部件,并且该小部件可以是任何类型。
我需要在每个班级都设置 Ui 吗?
只有在 pyuic 和 Qt Designer 的帮助下使用生成的类时才必须调用 setupUi,在您的情况下,每个选项卡中的小部件都是使用 Qt Designer 生成的?我发现我没有
请记住,您的 .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_())
【讨论】:
@eyllanesc 我真的很抱歉,我从昨晚开始一直在寻找这个问题,但无法解决它,也不知道如何解决,所以我知道你是一个积极的帮助者,所以我标记了你真的很抱歉为此 @eyllanesc 先生“Raju”是我的朋友,这是他的 acc,他也在 pyqt 上做一个项目,所以他问我如何解决我不知道该怎么做所以我问他在这里发帖。由于没有回复,我在这里标记了你,因为这篇文章有点相关 @eyllanesc 先生,我会努力改进它们,对不起。你能帮我解决我标记的查询吗?先生,谢谢先生以上是关于从多个类组成 PyQt5 UI的主要内容,如果未能解决你的问题,请参考以下文章