Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将项目添加到QComboBox会添加空白项目_Python_Python 3.x_Pyqt_Pyqt5_Qcombobox - Fatal编程技术网

Python 将项目添加到QComboBox会添加空白项目

Python 将项目添加到QComboBox会添加空白项目,python,python-3.x,pyqt,pyqt5,qcombobox,Python,Python 3.x,Pyqt,Pyqt5,Qcombobox,我正在通过循环的向QComboBox添加项目,该循环位于通过按下按钮调用的函数内。正如您在下面的代码中所看到的,我从数据库调用数据,特别是从SQLite,它通过一个变量进行过滤,这个变量是:depid。该函数在调用并填充相应的QComboBox时性能良好,但再次调用时,尽管它仍保留相应的元素,但它会添加一个空白项,当我再次按下按钮时,QComboBox保留元素,保留上一个空白项并添加另一个,即,每次调用该函数时,都会添加一个空白项 Cur.execute("SELECT * FROM worke

我正在通过循环的QComboBox添加项目,该循环位于通过按下按钮调用的函数内。正如您在下面的代码中所看到的,我从数据库调用数据,特别是从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])
说明:
addItem(s)
方法在最终位置添加文本为“s”的新项目,并且
setItemText(i,s)
将第i个项目的文本替换为“s”

为了理解错误,我将使用以下示例:假设在第一次单击时添加了3个空文本项,它们分别设置为第一、第二和第三项的文本“a”、“b”和“c”,在第二次单击时,将添加3个空文本项,因此将有6个项:“a”、“b”、“c”、“c”、“和”但是你用3个文本“x”、“y”和“z”替换第一、第二和第三个,所以最后会有6个项目:“x”、“y”、“z”、“y”

解决方案: 无需将
addItem()
setItemText()
一起使用,只需在循环之前清理QComboBox并添加新项,此外,不需要枚举

另一方面,不要使用连接来创建SQL查询,因为它会使代码容易受到SQL注入的影响,而应使用占位符

Cur.execute(“从部门=?”的工作人员中选择*,(部门ID,)
workfilter=Cur.fetchall()
self.boxfilteredmorer.clear()文件
对于workfilter中的数据:
self.boxFilteredMorer.addItem(数据[1])

绝对完美。非常感谢。enumerate函数的作用是我在一个教程中看到了它,而且,在它工作的过程中,我将它保留了下来,根据教程,它是为了确定每个项的索引,我对PyQt5非常陌生。另一件事,该查询将如何改进?使用您提到的占位符方法。@Jalkhov 1)不要只是复制代码,要理解它并分析它为什么工作以及在哪些情况下可能失败。2) 占位符是“?”对于已应用的内容,请阅读