开发者社区> 问答> 正文

向QComboBox中添加项将添加空白项

我通过一个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

展开
收起
kun坤 2019-12-27 17:05:00 729 0
1 条回答
写回答
取消 提交回答
  • 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])
    
    2019-12-27 17:05:07
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载