好的,我正在设置一个使用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。