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

如何获取循环创建的PyQt6 ComboBox的选择反馈

解决PyQt6中批量ComboBox仅能获取最后一个选择内容的问题

你遇到的问题核心是:循环创建ComboBox时,每次都把新控件赋值给self.cb,导致这个变量最终只指向最后一个创建的ComboBox,所以点击提交时只能获取它的选择内容。要解决这个问题,只需要用一个列表来存储所有创建的ComboBox实例,这样就能遍历列表拿到每个控件的选择结果。

修改后的代码:

import sys
from PyQt6.QtCore import *
from PyQt6.QtGui import *
from PyQt6.QtWidgets import *

class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.resize(200, 200)

        self.centralwidget = QWidget()
        self.setCentralWidget(self.centralwidget)
        self.lay = QHBoxLayout(self.centralwidget)
        # 初始化列表存储所有ComboBox
        self.combo_boxes = []
        self.MakeButtons(5)

    def MakeButtons(self, x):
        for i in range(x):
            cb = QComboBox(self) 
            cb.addItem("ID")
            cb.addItem("Num")
            cb.addItem("Bi")
            cb.addItem("Cat")
            self.lay.addWidget(cb)
            # 将每个ComboBox添加到列表中
            self.combo_boxes.append(cb)
        self.btn = QPushButton('Submit', self)
        self.btn.clicked.connect(self.printingaction)

    def printingaction(self):
        # 遍历列表,打印每个ComboBox的选择内容
        for idx, combo in enumerate(self.combo_boxes):
            print(f"第{idx+1}个ComboBox选择内容: {combo.currentText()}")

app = QApplication([])
window = Window()
window.show()
app.exec()

关键修改点:

  • 新增self.combo_boxes = []作为存储所有ComboBox的容器
  • 循环创建ComboBox时,不再赋值给self.cb,而是直接用局部变量cb,然后将其添加到self.combo_boxes列表中
  • 在printingaction方法里,遍历self.combo_boxes列表,逐个获取每个ComboBox的currentText()并打印

这样修改后,点击提交按钮就能输出所有ComboBox的选择内容了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:20:35