Pyside2.QtCore.QObject не является прямым базовым классом MyTableWidget - ошибка с PySide2 - PullRequest
0 голосов
/ 29 января 2019

У меня есть опыт работы с 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 Ответ

0 голосов
/ 30 января 2019

В вашем случае, как сказал ekhumoro , проблема заключается в вызове super, и вам нужно сделать ссылку на MyTableWidget вместо QWidget.

Обычно в классах 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__(...)
...