我通过一个for循环将项目添加到QComboBox中,该循环在一个函数中,按下按钮即可调用该函数。正如您在下面的代码中看到的,我正在从数据库调用数据,特别是从SQLite调用数据,SQLite是通过一个变量筛选的,它是:depid。函数执行调用时填写各自的QComboBox,但再次调用时,尽管它仍保持各自的元素,它添加了一个空白的项目,当我再次按下按钮时,QComboBox使元素,让前面的空白项,增加了另一个,也就是说,每次调用这个函数添加一个空白的项目。
Cur.execute("SELECT * FROM workers WHERE departament = "+str(depid))
workfilter = Cur.fetchall()
for n,data in enumerate(workfilter):
self.BoxFilteredWorer.addItem("")
self.BoxFilteredWorer.setItemText(n, data[1])
问题来源StackOverflow 地址:/questions/59382640/adding-items-to-a-qcombobox-adds-blank-items
addItem(s)方法在最终位置添加文本为“s”的新项目,而setItemText(i, s)将第i项的文本替换为“s”。 理解错误我将用下面的例子:假设第一次点击3项与空的文本添加并设置为文本“a”、“b”和“c”第一,第二和第三项,分别在第二个点击3新项目添加了空的文本将会有6项:“a”、“b”,“c”,“”,“”和“”但是你取代1日2日和3日3文本“x”,“y”和“z”最后会有6项:“x”,“y”、“z”,“”,“”y“。 没有必要将addItem()与setItemText()一起使用,只需在循环之前清除QComboBox并添加新项目即可,此外,枚举也是没有必要的。 另一方面,不要使用连接来创建SQL查询,因为这会使您的代码容易受到SQL注入的影响,而应该使用占位符。
Cur.execute("SELECT * FROM workers WHERE departament = ?", (depid,))
workfilter = Cur.fetchall()
self.BoxFilteredWorer.clear()
for data in workfilter:
self.BoxFilteredWorer.addItem(data[1])
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。