如何在Python和PyQt5中从另一个类加载选项卡的内容?



有一个类MainWindow,它有一个带选项卡的栏。其中一个选项卡创建位于 FactorsTabWidget.py 文件中的 FactorsTab 类。

启动崩溃时:

第 13 行,在初始化 self.table =QtGui.QStandardItemModel(parent=self.frame_factors) AttributeError:"NoneType"对象没有属性"QStandardItemModel"

文件 FactorsTabWidget.py 中的第 13 行:self.table => QtGui.QStandardItemModel(parent=self.frame_factors)

如何从另一个类生成选项卡的内容?

文件 main.py

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        factors_tab = FactorsTabWidget.FactorsTab()
        self.tabs = QtWidgets.QTabWidget()
        self.tabs.addTab(factors_tab, "Factors")        

文件 FactorsTabWidget.py

class FactorsTab(QtWidgets.QWidget):
    def __init__(self):
        QtWidgets.QWidget.__init__(self, parent=None)
        self.frame_factors = QtWidgets.QTableView()
        self.table = QtGui.QStandardItemModel(parent=self.frame_factors)
        self.lst1 = ['Дискета', 'Бумага для принтера', 'Барабан для принтера']
        self.lst2 = ["10", "3", "10452048"]
        for row in range(0, 3):
            item1 = QtGui.QStandardItem(self.lst1[row])
            item2 = QtGui.QStandardItem(self.lst2[row])
            self.table.appendRow([item1, item2])
        self.table.setHorizontalHeaderLabels(['Factor Name', 'Кол-во'])
        self.frame_factors.setModel(self.table)
  1. 我已经更改了类中的父初始化,从QtWidgets.QTableView.__init__(self, parent=None) toQtWidgets.QWidget.__init__(self, parent=None)'创建选项卡'代码

  2. 在字符串中QtGui.QStandardItemModel将参数从 (parent=self.frame_factors) 更改为(0, 2)

在选项卡中创建表所需的一切都是创建小部件的实例

工作解决方案:

文件 main.py

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.factors_tab = FactorsTab()
        self.table_tab = TableTab()        
        self.box = QtWidgets.QVBoxLayout()
        self.tabs = QtWidgets.QTabWidget()
        self.tabs.addTab(self.factors_tab, "Factors")
        self.tabs.addTab(self.table_tab, "Table of coding factors")        
        self.setCentralWidget(self.tabs)
        self.tabs.setElideMode(QtCore.Qt.ElideLeft)
        self.tabs.setCurrentIndex(0)
        self.tabs.setUsesScrollButtons(True)
        self.tabs.setLayout(self.box)
        self.add_menu()

文件 FactorsTabWidget.py

class FactorsTab(QtWidgets.QTableView):
    def __init__(self):
        QtWidgets.QTableView.__init__(self, parent=None)
        self.label = QtWidgets.QLabel("Select folder, project file name")
        self.vbox = QtWidgets.QVBoxLayout()
        self.vbox.addWidget(self.label)
        self.frame_factors = QtWidgets.QTableView()
        self.table = QtGui.QStandardItemModel(0, 2)
        self.lst1 = ['it1', 'it2', 'it3']
        self.lst2 = ["10", "3", "10452048"]
        for row in range(0, 3):
            item1 = QtGui.QStandardItem(self.lst1[row])
            item2 = QtGui.QStandardItem(self.lst2[row])
            self.table.appendRow([item1, item2])
        self.table.setHorizontalHeaderLabels(['Factor Name', 'Num'])
        self.frame_factors.setModel(self.table)
        self.vbox.addWidget(self.frame_factors)
        self.setLayout(self.vbox)

最新更新