pyside6 中怎么在QCheckBox控件上添加下拉菜单
时间: 2024-05-07 14:16:06 浏览: 171
在 PySide6 中,QCheckBox 控件本身不支持下拉菜单,但可以通过在 QCheckBox 控件旁边添加一个 QPushButton 控件,并在 QPushButton 控件上添加下拉菜单来实现类似功能。具体步骤如下:
1. 创建一个 QCheckBox 控件和一个 QPushButton 控件,并将它们放在同一个布局中。
```python
checkbox = QtWidgets.QCheckBox("Checkbox")
button = QtWidgets.QPushButton("Dropdown")
layout = QtWidgets.QHBoxLayout()
layout.addWidget(checkbox)
layout.addWidget(button)
```
2. 创建一个 QMenu 控件,并在其中添加需要的 QAction 控件。
```python
menu = QtWidgets.QMenu()
action1 = menu.addAction("Action 1")
action2 = menu.addAction("Action 2")
```
3. 将 QPushButton 控件的 clicked 信号连接到一个槽函数中,在槽函数中显示 QMenu 控件。
```python
def show_menu():
menu.exec_(button.mapToGlobal(QtCore.QPoint(0, button.height())))
button.clicked.connect(show_menu)
```
4. 当用户选择 QMenu 中的一个 QAction 控件时,更新 QCheckBox 控件的文本。
```python
def set_checkbox_text(action):
checkbox.setText(action.text())
action1.triggered.connect(set_checkbox_text)
action2.triggered.connect(set_checkbox_text)
```
完整示例代码如下:
```python
from PySide6 import QtCore, QtWidgets
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
checkbox = QtWidgets.QCheckBox("Checkbox")
button = QtWidgets.QPushButton("Dropdown")
layout = QtWidgets.QHBoxLayout()
layout.addWidget(checkbox)
layout.addWidget(button)
menu = QtWidgets.QMenu()
action1 = menu.addAction("Action 1")
action2 = menu.addAction("Action 2")
def show_menu():
menu.exec_(button.mapToGlobal(QtCore.QPoint(0, button.height())))
button.clicked.connect(show_menu)
def set_checkbox_text(action):
checkbox.setText(action.text())
action1.triggered.connect(set_checkbox_text)
action2.triggered.connect(set_checkbox_text)
central_widget = QtWidgets.QWidget()
central_widget.setLayout(layout)
self.setCentralWidget(central_widget)
if __name__ == "__main__":
app = QtWidgets.QApplication([])
window = MainWindow()
window.show()
app.exec_()
```
阅读全文