将sqlite3数据库转换为PyQt QCompleter / QStringListModel

时间:2018-02-17 08:16:58

标签: python sqlite pyqt

好的,我正在设置一个使用QCompleter和QStringListModel的QLineEdit。

我试图将QStringListModel设置为setStringList到从我的sqlite3数据库中提取的动态列表。

我尝试了多种方式,但这似乎是我最接近的方式。当我打印new_list时,我可以看到列表打印数据库标题但是当我尝试将标题传递给setStringList作为变量时,程序将运行,但是当我搜索字符串时,没有自动完成。

这是允许轻松测试的源代码:

import sys
import sqlite3
import time
import datetime
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.uic.properties import QtGui

conn = sqlite3.connect('gamedatabase.db')
c = conn.cursor()

class window(QMainWindow):

    # Defines Initial Window Settings
    def __init__(self):
        super(window, self).__init__()
        self.setGeometry(650, 300, 500, 400) # window geometry
        self.home()

    def home(self):
        self.edit = QLineEdit(self)
        self.edit.move(250, 250)
        self.completer = QCompleter()
        self.edit.setCompleter(self.completer)
        self.model = QStringListModel()
        self.completer.setModel(self.model)
        self.get_data()
        self.show()


    def get_data(self):
        c.execute(" SELECT title FROM gamedatabase ")
        results = c.fetchall()
        new_list = [i[0] for i in results]
        print(new_list) # Test print
        self.model.setStringList(new_list) #From here up I was able to get the 
        # code to work but there's no auto completion in the QLineEdit.
def run():
    app = QApplication(sys.argv)
    Gui = window()
    sys.exit(app.exec_())

if __name__ == "__main__":
    run() 

我试过了:

self.model.setStringList(['this', 'will', 'work',) # This will work.
self.model.setStringList([new_list]) # Does not work, returns error 
# (TypeError: index 0 has type 'list' but 'str' is expected)

我尽可能多地尝试谷歌搜索,但似乎没有关于深入使用PyQt或Sqlite3的大量信息。我是python的新手,所以如果有任何我忽略或遗漏的论坛,这些论坛提供了一些这些模块的深入信息,请告诉我,因为我真的很感激。< / p>

提前致谢。

TLDR:从sqlite3数据库中选择所有游戏,并为QCompleter和QStringListModel设置为setStringList。

0 个答案:

没有答案