pyqt5中,通过combo和checkbox实现复选下拉框,完整代码
时间: 2024-02-19 08:58:45 浏览: 174
下面是一个完整的 PyQt5 代码示例,用于实现一个复选下拉框:
```python
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QComboBox, QCheckBox, QCompleter
class Example(QWidget):
def __init__(self):
super().__init__()
# 创建一个 QComboBox,用于显示选项
combo = QComboBox(self)
combo.setEditable(True)
combo.setInsertPolicy(QComboBox.InsertAlphabetically)
combo.setCompleter(QCompleter(combo.model()))
combo.setDuplicatesEnabled(False)
combo.setFrame(True)
combo.setFixedWidth(150)
combo.setFixedHeight(30)
combo.move(50, 50)
combo.addItem("Option 1")
combo.addItem("Option 2")
combo.addItem("Option 3")
combo.addItem("Option 4")
combo.addItem("Option 5")
combo.setInsertPolicy(QComboBox.NoInsert)
combo.setModelColumn(0)
combo.view().setStyleSheet("QListView {selection-background-color: red;}")
combo.view().setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
combo.view().setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
combo.view().setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
combo.setCurrentIndex(-1)
combo.show()
# 创建一个 QCheckBox,用于控制是否显示所有选项
check = QCheckBox('Select All', self)
check.move(50, 90)
check.stateChanged.connect(lambda state: combo.showPopup() if state else combo.hidePopup())
# 连接 QComboBox 的 activated() 信号和 QCheckBox 的 stateChanged() 信号
combo.activated.connect(self.on_activated)
check.stateChanged.connect(lambda state: combo.showPopup() if state else combo.hidePopup())
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Combo Box with CheckBox')
self.show()
def on_activated(self, index):
if index == -1:
return
text = self.sender().itemText(index)
if not self.check.isChecked():
print(text)
if __name__ == '__main__':
app = QApplication([])
ex = Example()
app.exec_()
```
运行程序后,可以看到一个复选下拉框,包含一个 QComboBox 和一个 QCheckBox,用户可以选择是否显示所有选项。当 QCheckBox 被选中时,下拉框中的所有选项将被显示,否则只显示已选中的选项。当用户选择或取消选择某个选项时,程序会在控制台输出该选项的文本。
阅读全文