在我的主程序中,我有一个包含TabWidget的Dock小部件(垂直布局)(每个选项卡添加了布局) . 在我的第一个选项卡中,我添加了一个静态表,它使用dock调整大小 .

我试图允许用户通过将TableWidget设计从另一个文件导入选项卡来动态添加选项卡;但是,我无法使布局模仿第一个选项卡 .

以下是我的代码 . 我可以让 table 出现在新制作的标签中,只是没有完全调整到停靠窗口 .

我的python启动文件:

from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import mainwindow, sys, os, PyQt5, resources, dataTable

class dataForm(QtWidgets.QWidget, dataTable.Ui_Form)
    def __init__(self, parent=None):
        super(dataForm, self).__init__(parent)
        self.setupUi(self)

class Example(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow):
    def __init__(self, parent=None):
        super(Example, self).__init__(parent)
        self.setupUi(self)
        self.shortcut.activated.connect(self.addTabs)


    def Resolution(self):
        app = QtWidgets.QApplication([])
        resolution = app.desktop().screenGeometry()
        width, height = resolution.width(), resolution.height()
        self.setMaximumSize(QtCore.QSize(width, height))

    def addTabs(self):
        self.DataSets.setUpdatesEnabled(True)

        self.tab = QtWidgets.QWidget()
        self.tab.setAutoFillBackground(False)
        self.tab.setObjectName("userAdded")

        pages = self.count()

        # Set the tab layout
        self.tableLayout = QtWidgets.QVBoxLayout(self.tab)
        self.tableLayout.setContentsMargins(1, 0, 1, 0)
        self.tableLayout.setSpacing(0)
        self.tableLayout.setObjectName("tableGrid")

        # Add table to the new tab widget
        self.table = dataForm(self.tab)

        # Add table to layout
        self.tableLayout.addWidget(self.table)
        self.tableLayout.addStretch()
        # Add the tab and go to that location
        self.DataSets.insertTab((pages-1), self.tab, "Set %d" %(pages))
        self.DataSets.setCurrentIndex(pages-1)


def main():

    app = QtWidgets.QApplication(sys.argv)  
    form = Example()                       
    form.showMaximized()                   
    app.exec_()                            

if __name__ == '__main__':
    main()

和我的dataTable.ui表单:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(242, 450)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(Form.sizePolicy().hasHeightForWidth())
        Form.setSizePolicy(sizePolicy)
        self.tableWidget = QtWidgets.QTableWidget(Form)
        self.tableWidget.setGeometry(QtCore.QRect(1, 0, 240, 450))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.tableWidget.sizePolicy().hasHeightForWidth())
        self.tableWidget.setSizePolicy(sizePolicy)
        self.tableWidget.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
        self.tableWidget.setAutoFillBackground(True)
        self.tableWidget.setStyleSheet("QHeaderView::section { background-color:rgb(140, 200, 172)};\n"
"")
        self.tableWidget.setFrameShape(QtWidgets.QFrame.Panel)
        self.tableWidget.setFrameShadow(QtWidgets.QFrame.Plain)
        self.tableWidget.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContentsOnFirstShow)
        self.tableWidget.setDragEnabled(True)
        self.tableWidget.setAlternatingRowColors(True)
        self.tableWidget.setGridStyle(QtCore.Qt.SolidLine)
        self.tableWidget.setRowCount(35)
        self.tableWidget.setColumnCount(10)
        self.tableWidget.setObjectName("tableWidget")
        item = QtWidgets.QTableWidgetItem()
        brush = QtGui.QBrush(QtGui.QColor(50, 0, 0))
        brush.setStyle(QtCore.Qt.NoBrush)
        item.setForeground(brush)
        self.tableWidget.setItem(0, 1, item)
        self.tableWidget.horizontalHeader().setCascadingSectionResizes(False)
        self.tableWidget.horizontalHeader().setDefaultSectionSize(70)
        self.tableWidget.horizontalHeader().setHighlightSections(True)
        self.tableWidget.horizontalHeader().setMinimumSectionSize(39)
        self.tableWidget.verticalHeader().setVisible(True)
        self.tableWidget.verticalHeader().setDefaultSectionSize(20)
        self.tableWidget.verticalHeader().setSortIndicatorShown(True)
        self.tableWidget.verticalHeader().setStretchLastSection(False)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.tableWidget.setSortingEnabled(True)
        __sortingEnabled = self.tableWidget.isSortingEnabled()
        self.tableWidget.setSortingEnabled(False)
        self.tableWidget.setSortingEnabled(__sortingEnabled)

我想,我非常接近 . 有什么建议?

Edit: 更新了代码,使dataTable被分类为QWidget,并将self.tab作为其def的AddTabs中的父项传递 . 另外,我添加了一些意外删除的AddTabs布局 .