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

PyQt5如何将MySQL查询结果逐行添加到QComboBox下拉选项中

问题原因

你的两次写法都错误地将列表整体转为字符串传入addItem方法:

  1. 初始版本:循环结束后将存储了全部5条记录的列表整体转成字符串,addItem单次调用只会添加1个选项,最终就出现全部记录拼接成单个选项的问题
  2. 调整后版本:把addItem移到循环内,但还是传入str(item),此时item是不断累加元素的列表,每次循环添加的都是当前已拼接所有记录的列表字符串,依旧不符合要求
解决方案

有两种常用实现方式,按需选择即可:

方式1:循环内逐行添加单个选项

不需要额外存储所有选项的场景直接用该方式,每次循环拼接当前行的字符串后直接传入addItem:

cursor = cnx.cursor()
query = "SELECT buyerID, lastName, firstName, middleName FROM buyer ORDER BY id DESC LIMIT 5"
cursor.execute(query)
data = cursor.fetchall()
for a, b, c, d in data:
    row = "{} | {}, {} {}".format(a, b, c, d)
    # 直接传入当前行的字符串,不要转列表
    self.customerID.addItem(row)

方式2:批量添加所有选项

如果需要先把所有选项存储到列表中后续复用,可以用QComboBox的addItems方法,直接传入字符串列表即可自动拆分每个元素为独立选项:

cursor = cnx.cursor()
query = "SELECT buyerID, lastName, firstName, middleName FROM buyer ORDER BY id DESC LIMIT 5"
cursor.execute(query)
data = cursor.fetchall()
item_list = []
for a, b, c, d in data:
    row = "{} | {}, {} {}".format(a, b, c, d)
    item_list.append(row)
# addItems方法接收字符串列表作为参数,自动批量添加
self.customerID.addItems(item_list)
方法说明
  • addItem(参数):接收单个字符串作为入参,单次调用仅添加1个选项
  • addItems(参数):接收由字符串组成的可迭代对象(列表、元组等)作为入参,单次调用会将每个元素作为独立选项批量添加

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:36:10