如何向pyside2-uic生成UI的centralwidget添加自定义可勾选QComboBox
问题原因
- 初始版本的
CheckableComboBox构造方法未设计接收父控件参数,因此传入self.centralwidget时触发参数数量不匹配的报错。 - 你修改后的构造方法虽然接收了父控件参数,但没有将该参数传递给父类
QComboBox的构造方法,导致自定义控件没有绑定到父容器,因此不会在界面上渲染显示。
解决方案
步骤1:修改CheckableComboBox的构造方法
调整构造方法支持传入父控件参数,并将参数透传给父类构造:
class CheckableComboBox(QComboBox): def __init__(self, parent=None): # 把父控件参数传递给父类QComboBox的构造方法 super(CheckableComboBox, self).__init__(parent) self.view().pressed.connect(self.handleItemPressed) self.setModel(QStandardItemModel(self)) def handleItemPressed(self, index): item = self.model().itemFromIndex(index) if item.checkState() == Qt.Checked: item.setCheckState(Qt.Unchecked) else: item.setCheckState(Qt.Checked)
步骤2:正常添加控件即可
你原来添加控件的代码无需修改,即可正常显示自定义可勾选下拉框:
self.checkableComboBoxStatus = CheckableComboBox(self.centralwidget) self.checkableComboBoxStatus.setObjectName(u"checkableComboBoxStatus") self.checkableComboBoxStatus.setGeometry(QRect(300, 150, 300, 100))
可选补充:添加带勾选框的选项示例
添加选项时需要显式设置可勾选属性,否则下拉列表不会显示勾选框:
# 示例:批量添加选项 option_list = ["状态1", "状态2", "状态3", "状态4"] for opt in option_list: item = QStandardItem(opt) item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsUserCheckable) item.setCheckState(Qt.Unchecked) # 初始未勾选 self.checkableComboBoxStatus.model().appendRow(item)
内容的提问来源于stack exchange,提问作者masky007
相关产品推荐
相关产品推荐

