2013-09-20 2 views
0

Я смущен тем, как я могу использовать определенные атрибуты, возвращаемые после запроса в локальную базу данных SQLite. Я могу заполнить qlistwidget одним из атрибутов, но я не знаю, как получить другие атрибуты, когда пользователь нажимает на элемент listwidget.PyQT: Использование атрибутов из SQLite-запроса

Следующий код был создан с помощью Эрика, который предварительно заполнит некоторые из сигналов и слотов

@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

Вам просто нужно запросить из базы данных снова и работать с новой строкой.

@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") 

Очевидно, что это не касается вопросов santisation базы данных вы могли бы иметь, и предполагается, что name является уникальным в базе данных.

Смежные вопросы