Pyqt5:尝试添加QLayout“” Form”,该布局已经具有布局(多重继承python)

问题描述 投票:0回答:1

我已经创建了一个ui文件,[[window.ui(由一个选项卡小部件组成))和一个小部件文件([student(某些按钮,功能)),然后使用qtDesigner创建了pyic5格式的py文件。并继承一个单独的文件,例如mainWindow.pymainStudent.py

我在mainWindow.py中添加了一个tabWidget,我想从tab调用页面student.py。因此,我创建了一个新文件app.py,在该文件中,我首先从

mainWindow.py

继承了类,并添加了一个tab调用student,然后尝试从mainStudent.py继承该类。我的目标是如果我运行app.py,则

mainWindo

w将与tabwidget一起出现,其中选项卡名称为“ student”,如果我单击了“学生”选项卡,则所有元素都会从“ mainStudent.py”显示。但我是遇到这个错误:尝试将QLayout“”添加到已经具有布局的StudentPage“ Form”(注意:功能正常))>

我不知道我在哪里犯错了!请帮忙!

window.py(使用pyuic5从window.ui生成)

from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget) self.verticalLayout.setObjectName("verticalLayout") self.label = QtWidgets.QLabel(self.centralwidget) font = QtGui.QFont() font.setPointSize(20) self.label.setFont(font) self.label.setObjectName("label") self.verticalLayout.addWidget(self.label) self.tabWidget = QtWidgets.QTabWidget(self.centralwidget) self.tabWidget.setObjectName("tabWidget") self.verticalLayout.addWidget(self.tabWidget) MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.label.setText(_translate("MainWindow", "Main Window")) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow() ui = Ui_MainWindow() ui.setupUi(MainWindow) MainWindow.show() sys.exit(app.exec_())

student.py(使用pyuic5从window.ui生成)

from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(716, 635) self.gridLayout_2 = QtWidgets.QGridLayout(Form) self.gridLayout_2.setObjectName("gridLayout_2") self.label = QtWidgets.QLabel(Form) font = QtGui.QFont() font.setPointSize(16) self.label.setFont(font) self.label.setObjectName("label") self.gridLayout_2.addWidget(self.label, 0, 0, 1, 1) self.tabWidget = QtWidgets.QTabWidget(Form) self.tabWidget.setObjectName("tabWidget") self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") self.gridLayout = QtWidgets.QGridLayout(self.tab) self.gridLayout.setObjectName("gridLayout") self.pushButton = QtWidgets.QPushButton(self.tab) self.pushButton.setObjectName("pushButton") self.gridLayout.addWidget(self.pushButton, 0, 0, 1, 1) self.tabWidget.addTab(self.tab, "") self.tab_2 = QtWidgets.QWidget() self.tab_2.setObjectName("tab_2") self.gridLayout_3 = QtWidgets.QGridLayout(self.tab_2) self.gridLayout_3.setObjectName("gridLayout_3") self.pushButton_2 = QtWidgets.QPushButton(self.tab_2) self.pushButton_2.setObjectName("pushButton_2") self.gridLayout_3.addWidget(self.pushButton_2, 0, 0, 1, 1) self.tabWidget.addTab(self.tab_2, "") self.gridLayout_2.addWidget(self.tabWidget, 1, 0, 1, 1) self.retranslateUi(Form) self.tabWidget.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Form")) self.label.setText(_translate("Form", "Student Page")) self.pushButton.setText(_translate("Form", "Test Function")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("Form", "Regular")) self.pushButton_2.setText(_translate("Form", "Test Second Function")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("Form", "Yearly")) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) Form = QtWidgets.QWidget() ui = Ui_Form() ui.setupUi(Form) Form.show() sys.exit(app.exec_())

mainWindow.py

from PyQt5 import QtCore, QtGui, QtWidgets import sys from files.main_interfaces.window import Ui_MainWindow class MainWindow(QtWidgets.QMainWindow,Ui_MainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.setupUi(self) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) w = MainWindow() w.show() sys.exit(app.exec_())

mainStudent.py

from PyQt5 import QtCore, QtGui, QtWidgets import sys from files.main_interfaces.student import Ui_Form class stdMainWindow(QtWidgets.QWidget,Ui_Form): def __init__(self, parent=None): super(stdMainWindow, self).__init__(parent) self.setupUi(self) self.pushButton.clicked.connect(self.function1) def function1(self): print("function called") if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) w = stdMainWindow() w.show() sys.exit(app.exec_())

app.py

from PyQt5 import QtCore, QtGui, QtWidgets from mainWindow import MainWindow from mainStudent import stdMainWindow class studentPage(stdMainWindow): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.setupUi(self) class MainWindow3(MainWindow): def __init__(self): super().__init__() self.setupUi(self) # Add tab self.studentPage = studentPage() self.tabWidget.addTab(self.studentPage, 'Student') if __name__ == '__main__': import sys app = QtWidgets.QApplication(sys.argv) window = MainWindow3() window.show() sys.exit(app.exec_())

我已经使用qtDesigner创建了一个ui文件window.ui(由选项卡小部件组成)和一个Widget文件的学生(一些按钮,功能),然后使用pyuic5转换为py文件。并继承一个单独的...
python pyqt pyqt5
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.