我对如何使用查询到本地SQLite数据库后返回的某些属性感到困惑。我可以使用其中一个属性填充qlistwidget,但是当用户点击listwidget项时我不知道如何获取其他属性。
以下代码是使用Eric创建的,它预先填充了一些信号和插槽
@pyqtSignature("QString")
def on_searchText_textEdited(self, p0):
"""
Slot documentation goes here.
"""
# TODO: not implemented yet
self.resultsList.clear()
self.searchItem = self.searchText.text()
self.search()
@pyqtSignature("QListWidgetItem*")
def on_resultsList_itemClicked(self, item):
"""
Slot documentation goes here.
"""
# TODO: not implemented yet
result = str(item.text())
QMessageBox.about(self, "Clicked Item", "%s")%(result)
@pyqtSignature("")
def on_cancelButton_clicked(self):
"""
Slot documentation goes here.
"""
self.close()
def search(self):
conn = sqlite3.connect("C:\\file.sqlite")
cur = conn.cursor()
sqlqry = "SELECT name, number, size FROM lookup WHERE name LIKE '%s' LIMIT 100;"%("%"+self.searchItem+"%")
try:
c = cur.execute(sqlqry)
data = c.fetchall()
for i in data:
self.resultsList.addItem(i[0])
except sqlite3.Error, e:
QMessageBox.about(self, "Error message", "Error")
因此,当用户在行编辑中输入文本时,我的resultsList会被填充,但是当用户点击某个项目时,我会收到错误消息,其中包含有关NoneType和str的内容。
但是,我真正需要使用的是我的代码中其他地方的第二个和第三个属性。
那么如何通过itemClicked信号选择那些属性并创建两个新变量?
我希望这是有道理的,这是一个漫长的一天绕圈子
答案 0 :(得分:0)
您只需要再次从数据库进行查询并使用新行。
@pyqtSignature("QListWidgetItem*")
def on_resultsList_itemClicked(self, item):
"""
Slot documentation goes here.
"""
result = str(item.text())
QMessageBox.about(self, "Clicked Item", "%s")%(result)
conn = sqlite3.connect("C:\\file.sqlite")
cur = conn.cursor()
sqlqry = "SELECT name, number, size FROM lookup WHERE name = '%s' LIMIT 1;"%(result)
try:
c = cur.execute(sqlqry)
data = c.fetchone()
# Do something with data
except sqlite3.Error, e:
QMessageBox.about(self, "Error fetching %s"%name, "Error")
显然,这并不涉及您可能遇到的数据库问题,并假设name
在数据库中是唯一的。