PyQt5如何将MySQL查询结果逐行添加到QComboBox下拉选项中
问题原因
你的两次写法都错误地将列表整体转为字符串传入addItem方法:
- 初始版本:循环结束后将存储了全部5条记录的列表整体转成字符串,
addItem单次调用只会添加1个选项,最终就出现全部记录拼接成单个选项的问题 - 调整后版本:把
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
相关产品推荐
相关产品推荐

