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

时间:2017-01-10 12:05:12

标签: python pyqt5

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

在启动崩溃时:

  

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

     

文件FactorsTabWidget.py中的第13行:self.table => QtGui.QStandardItemModel(父= 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 个答案:

答案 0 :(得分:1)

  1. 我已经在QtWidgets.QTableView.__init__(self, parent=None) toQtWidgets.QWidget.__init__(self, parent=None)'

  2. 创建了标签'代码的类中更改了父初始化 字符串QtGui.QStandardItemModel中的
  3. 将参数从(parent=self.frame_factors)更改为(0, 2)

  4. 在Tab中创建表的一切都需要创建一个小部件实例

    工作解决方案:

    档案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)