You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现QMenu中仅单个QAction可勾选且默认选中首个项?

实现QMenu单选可勾选选项的解决方案

嘿,这个需求用Qt的QActionGroup就能轻松搞定!它专门用来管理一组互斥的动作,完美匹配你"同一时间仅能选中一个选项"的要求,同时还能保留你已经设置好的默认选中第一个选项的逻辑。

核心思路

把所有可勾选的QAction加入同一个QActionGroup,这个组默认就是**排他(互斥)**模式,所以当你选中其中一个动作时,其他动作会自动取消勾选,无需手动处理状态切换。

修改后的完整代码

# 创建支付类型菜单
paymentType = QMenu('Payment Type', self)

# 创建动作组,用于管理互斥的勾选动作
action_group = QActionGroup(paymentType)
# 显式设置排他模式(默认已为True,写出来更清晰)
action_group.setExclusive(True)

# 添加动作到菜单和动作组,同时设置默认选中第一个
paymentType.addAction(QAction('Cash', paymentType, checkable=True, checked=True, actionGroup=action_group))
paymentType.addAction(QAction('Noncash Payment', paymentType, checkable=True, actionGroup=action_group))
paymentType.addAction(QAction('Cash on Delivery', paymentType, checkable=True, actionGroup=action_group))
paymentType.addAction(QAction('Bank Transfer', paymentType, checkable=True, actionGroup=action_group))

# 将子菜单添加到主菜单
menu.addMenu(paymentType)

额外小贴士

如果之后需要获取当前选中的支付类型,可以通过以下代码获取:

selected_action = action_group.checkedAction()
if selected_action:
    print(f"当前选中的支付类型:{selected_action.text()}")

这样修改后,你的菜单就完全符合需求啦!

内容的提问来源于stack exchange,提问作者New2coding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:07:06