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

为何循环迭代添加按钮时QButtonGroup仅含单个按钮?

问题原因与解决方法

核心原因是Qt对象的生命周期管理机制:

  • QPushButton作为QWidget子类,若既没有设置父对象,也没有Python层面的引用保留,会被Python的垃圾回收机制销毁。
  • 第二个代码中,循环里每次创建的按钮仅被临时变量cs引用,下一次循环cs被重新赋值后,前一个按钮就失去了所有Python引用,随即被销毁,最终QButtonGroup里只剩最后一个还被cs引用的按钮。
  • 第一个代码里,所有按钮都被存入buttons列表,列表保留了每个按钮的引用,因此不会被垃圾回收,QButtonGroup能正常维护所有按钮。

解决方法二选一:

  1. 用列表或其他容器保存所有按钮的引用,避免被垃圾回收:
    buttons = []
    cs_group = QButtonGroup()
    for label in ("Beginner", "Senior", "Expert"):
        cs = QPushButton()
        cs.setObjectName(f"pushButton_{label}")
        cs.setText(label)
        buttons.append(cs)
        cs_group.addButton(cs)
    
  2. 给每个按钮设置父对象(比如某个窗口或容器控件),让Qt的对象树管理其生命周期:
    cs_group = QButtonGroup()
    # 假设parent_widget是你的父容器,比如QWidget/QMainWindow等
    for label in ("Beginner", "Senior", "Expert"):
        cs = QPushButton(parent_widget)
        cs.setObjectName(f"pushButton_{label}")
        cs.setText(label)
        cs_group.addButton(cs)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 09:54:22