如何获取循环创建的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
相关产品推荐
相关产品推荐

