Pyqt5弹出文件选择框报错(argument 1 has unexpected type ‘**)

TypeError 表明传递给 QFileDialog.getOpenFileName 方法的第一个参数类型不正确。PyQt5 期望该参数是一个 QWidget 类型的对象,用于作为对话框的父窗口部件。

在你的代码中,错误可能是由于 self 被误传递为 detectui,这通常是因为在代码中有一些混淆或者错误的调用导致的。通常这种情况发生在复制粘贴代码时可能出现了错误。

为了纠正这个问题,请确保在调用 getOpenFileName 方法时,将当前窗口(即 self)正确传递给它。这样 PyQt5 才能正确识别和管理对话框的生命周期。其实可以将该类的参数改为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()方法实现。这样就可以正确设置表格的水平表头了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值