将项目添加到 QComboBox 会添加空白项目
Adding items to a QComboBox adds blank items
我正在通过 for cycle 将项目添加到 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"、""、"" 和 "",但您用 3 个文本 "x"、"y" 和 "z" 替换第 1、第 2 和第 3,所以最后会有 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])
我正在通过 for cycle 将项目添加到 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"、""、"" 和 "",但您用 3 个文本 "x"、"y" 和 "z" 替换第 1、第 2 和第 3,所以最后会有 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])