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
,但这解决了问题中的具体错误。
我是 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
,但这解决了问题中的具体错误。