0

我对如何使用查询本地 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 信号选择该属性并创建两个新变量呢?

我希望这是有道理的,这是漫长的一天

4

1 回答 1

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在数据库中是唯一的。

于 2013-09-23T01:38:27.743 回答