TypeError: arguments did not match any overloaded call

TypeError: arguments did not match any overloaded call

我是 QT 初学者 Python,我正在尝试 运行 一个小程序来显示 table 视图,每行旁边都有一个按钮。我尝试了下面显示的代码,但出现以下错误:

Traceback (most recent call last):
  File "/Users/Programs/bottone.py", line 42, in <module>
    mainwindow = MainWindow()
  File "/Users/Programs/bottone.py", line 29, in __init__
    self.btn_sell = IndexedButtonWidget('Edit')
  File "/Users/Programs/bottone.py", line 8, in __init__
    super(QPushButton, self).__init__(parent=parent)
TypeError: arguments did not match any overloaded call:
  QPushButton(parent: QWidget = None): argument 'parent' has unexpected type 'str'
  QPushButton(str, parent: QWidget = None): not enough arguments
  QPushButton(QIcon, str, parent: QWidget = None): not enough arguments

代码:

class IndexedButtonWidget(QPushButton):
    def __init__(self, parent=None):
        super(QPushButton, self).__init__(parent=parent)
        self.button_row = 0
        self.button_column = 0

    class MainWindow(QtWidgets.QMainWindow):
        def __init__(self, parent=None):
            QtWidgets.QMainWindow.__init__(self,parent)
            self.table = QtWidgets.QTableWidget()
            self.table.setColumnCount(3)
            self.setCentralWidget(self.table)
            data1 = ['row1','row2','row3','row4']
            data2 = ['1','2.0','3.00000001','3.9999999']

            self.table.setRowCount(4)

            for index in range(4):
                item1 = QtWidgets.QTableWidgetItem(data1[index])
                self.table.setItem(index,0,item1)
                item2 = QtWidgets.QTableWidgetItem(data2[index])
                self.table.setItem(index,1,item2)
                self.btn_sell = IndexedButtonWidget('Edit')
                self.btn_sell.button_row = index
                self.btn_sell.button_column = 2
                self.btn_sell.clicked.connect(self.handleButtonClicked)
                self.table.setCellWidget(index,2,self.btn_sell)

        def handleButtonClicked(self):
            button = self.sender()
            print(button.button_row)
            print(button.button_column)

您知道问题出在哪里吗?

IndexedButtonWidget 使用一个参数实例化:'Edit'

self.btn_sell = IndexedButtonWidget('Edit')

文档显示只有一个 QPushButton.__init__() 接受一个参数:QPushButton(self, parent: Optional[PySide6.QtWidgets.QWidget] = None) -> None。所以代码最终将 'Edit' 作为 parent 传递,因此 TypeError.

help(QPushButton)
Help on class QPushButton in module PySide6.QtWidgets:

class QPushButton(QAbstractButton)
 |  QPushButton(self, icon: Union[PySide6.QtGui.QIcon, PySide6.QtGui.QPixmap], text: str, parent: Optional[PySide6.QtWidgets.QWidget] = None) -> None
 |  QPushButton(self, parent: Optional[PySide6.QtWidgets.QWidget] = None) -> None
 |  QPushButton(self, text: str, parent: Optional[PySide6.QtWidgets.QWidget] = None) -> None
 |
 |  Method resolution order:
 |      QPushButton
 |      QAbstractButton
 |      QWidget
 |      PySide6.QtCore.QObject
 |      PySide6.QtGui.QPaintDevice
 |      Shiboken.Object
 |      builtins.object
 |
 |  Methods defined here:
 |
 |  __delattr__(self, name, /)
 |      Implement delattr(self, name).
 |
 |  __init__(...)
 |      __init__(self, icon: Union[PySide6.QtGui.QIcon, PySide6.QtGui.QPixmap], text: str, parent: Optional[PySide6.QtWidgets.QWidget] = None) -> None
 |      __init__(self, parent: Optional[PySide6.QtWidgets.QWidget] = None) -> None
 |      __init__(self, text: str, parent: Optional[PySide6.QtWidgets.QWidget] = None) -> None
 |
 |      Initialize self.  See help(type(self)) for accurate signature.

这个错误可以通过更新 IndexedButtonWidget.__init__().

来解决
class IndexedButtonWidget(QPushButton):
    def __init__(self, text='', parent=None):
        super(QPushButton, self).__init__(text, parent=parent)
        self.button_row = 0
        self.button_column = 0

还有其他写__init__()的方法,这样就不会出现TypeError,但这解决了问题中的具体错误。