TypeError: setCellWidget(self, int, int, QWidget): argument 3 has unexpected type 'QTableWidgetItem'
时间: 2023-05-14 14:04:54 浏览: 157
这个错误是因为 setCellWidget() 方法的第三个参数需要传入一个 QWidget 类型的对象,而你传入了一个 QTableWidgetItem 类型的对象。你需要将 QTableWidgetItem 对象转换成 QWidget 对象,或者使用 setItem() 方法来设置单元格的内容。
相关问题
TypeError: arguments did not match any overloaded call: mapToScene(self, point: QPoint): argument 1 has unexpected type 'QPointF' mapToScene(self, rect: QRect): argument 1 has unexpected type 'QPointF' mapToScene(self, polygon: QPolygon): argument 1 has unexpected type 'QPointF' mapToScene(self, path: QPainterPath): argument 1 has unexpected type 'QPointF' mapToScene(self, ax: int, ay: int): argument 1 has unexpected type 'QPointF' mapToScene(self, ax: int, ay: int, w: int, h: int): argument 1 has unexpected type 'QPointF
这是一个类型错误,mapToScene方法的参数应该是QPoint类型的对象,而实际传入的是QPointF类型的对象,因此引发了类型错误。QPointF是QPoint的浮点数版本,二者并不兼容。可以通过将QPointF对象转换为QPoint对象来解决这个问题,例如:
```
pScene = self.graphics_view.mapToScene(QPoint(int(pos.x()), int(pos.y())))
```
这里使用int()函数将QPointF对象中的浮点数坐标值转换为整数类型,生成一个QPoint对象作为mapToScene方法的参数。这样就可以避免这个类型错误了。
TypeError: setHorizontalHeader(self, header: QHeaderView): argument 1 has unexpected type 'QWidget'
抱歉,上面的代码有误。setHorizontalHeader()方法的参数应该是一个QHeaderView对象,而不是QWidget对象。下面是修改后的代码:
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QTableWidget, QHeaderView, QComboBox, QVBoxLayout, QTableWidgetItem
from PyQt5.QtCore import Qt
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.table = QTableWidget()
self.table.setColumnCount(2)
self.table.setRowCount(3)
self.table.setHorizontalHeaderLabels(['Name', 'Age'])
for i in range(3):
name_item = QTableWidgetItem(f'name_{i}')
age_item = QTableWidgetItem(f'{i*10}')
self.table.setItem(i, 0, name_item)
self.table.setItem(i, 1, age_item)
self.setCentralWidget(self.table)
# 添加下拉多选框
combo_box = QComboBox(self)
combo_box.addItems(['Select All', 'Unselect All'])
combo_box.currentIndexChanged.connect(self.on_combo_box_change)
# 将下拉多选框添加到表头
header_v_box = QVBoxLayout()
header_v_box.addWidget(self.table.horizontalHeader())
header_v_box.addWidget(combo_box)
header_v_box.setContentsMargins(0, 0, 0, 0)
header_widget = QWidget()
header_widget.setLayout(header_v_box)
self.table.setHorizontalHeader(header_widget.header())
def on_combo_box_change(self, index):
if index == 0: # 选择全部
for i in range(self.table.rowCount()):
item = self.table.item(i, 0)
item.setCheckState(Qt.Checked)
elif index == 1: # 取消选择
for i in range(self.table.rowCount()):
item = self.table.item(i, 0)
item.setCheckState(Qt.Unchecked)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
```
这段代码中,我们将QWidget对象转换为QHeaderView对象,使用header()方法实现。这样就可以正确设置表格的水平表头了。
阅读全文