代码之家  ›  专栏  ›  技术社区  ›  DrakeMurdoch

Pyside2。QtCore。QObject不是MyTableWidget的直接基类——PySide2错误

  •  0
  • DrakeMurdoch  · 技术社区  · 7 年前

    我有C++背景,所以也许我不太理解Python类,但是在我的代码中,我得到了上面的错误。我试图学习PySide2和Qt,我从PyQt教程中获取了这段代码。据我所知,这些都是API兼容的,除了我修复的一些东西,所以这应该可以工作。

    我使用的代码如下:

    import sys
    from PySide2.QtWidgets import QMainWindow, QApplication, QPushButton, QWidget, QAction, QTabWidget,QVBoxLayout
    from PySide2.QtGui import QIcon
    from PySide2.QtCore import Slot
    
    class App(QMainWindow):
    
        def __init__(self):
            super().__init__()
            self.title = 'Tabbed window'
            self.left = 0
            self.top = 0
            self.width = 300
            self.height = 200
            self.setWindowTitle(self.title)
            self.setGeometry(self.left, self.top, self.width, self.height)
    
            self.table_widget = MyTableWidget(self)
            self.setCentralWidget(self.table_widget)
    
            self.show()
    
    class MyTableWidget(QWidget):
    
        def __init__(self, parent):
            super(QWidget, self).__init__(parent)
            self.layout = QVBoxLayout(self)
    
            # Initialize tab screen
            self.tabs = QTabWidget()
            self.tab1 = QWidget()
            self.tab2 = QWidget()
            self.tabs.resize(300,200)
    
            # Add tabs
            self.tabs.addTab(self.tab1,"Tab 1")
            self.tabs.addTab(self.tab2,"Tab 2")
    
            # Create first tab
            self.tab1.layout = QVBoxLayout(self)
            self.pushButton1 = QPushButton("Button")
            self.tab1.layout.addWidget(self.pushButton1)
            self.tab1.setLayout(self.tab1.layout)
    
            # Add tabs to widget
            self.layout.addWidget(self.tabs)
            self.setLayout(self.layout)
    
        @Slot()
        def on_click(self):
            print("\n")
            for currentQTableWidgetItem in self.tableWidget.selectedItems():
            print(currentQTableWidgetItem.row(), currentQTableWidgetItem.column(), currentQTableWidgetItem.text())
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = App()
        sys.exit(app.exec_())
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   cmaureir    7 年前

    在你的情况下 ekhumoro 但问题在于 super 打电话,你需要参考 MyTableWidget 而不是 QWidget .

    通常在继承自另一个Python类的Python类中,有三个选项(考虑Python 3)。我建议你选一个并坚持下去;)

    class Base():
        ...
    class Derived(Base):
        ...
    
    
    # Getting the super class (explicit)
    super(Derived, self).__init__(...)
    
    # Getting the super class (implicit)
    super().__init__(...)
    
    # Call the parent directly
    Base.__init__(...)