Python PyQt QLineEdit 到搜索栏

Posted

技术标签:

【中文标题】Python PyQt QLineEdit 到搜索栏【英文标题】:Python PyQt QLineEdit to Search bar 【发布时间】:2016-08-21 12:34:41 【问题描述】:

我正在尝试构建翻译器并在其中放置一个搜索栏。使用 QLineEdit 我想要的是自动完成这个词。 .. 我试过这个。但是这段代码不起作用,我说的是 SearchBar 功能。但其余代码与其余程序一起工作就好了。但 SearchBar 功能不起作用。并且没有完成我在 LineEdit 中输入的内容

from PyQt4 import QtGui,QtCore
import sys
from MainWin import Ui_MainWindow
import sqlite3

conn = sqlite3.connect('DictDB.db')
cors = conn.cursor()


class MainApp(QtGui.QMainWindow,Ui_MainWindow):
    def __init__(self):
        super(MainApp,self).__init__()

        self.setupUi(self)
        self.showMaximized()

        cors.execute("SELECT * FROM DictContents")
        for raw in cors.fetchall():
            self.TextBrowserAra.append(raw[0])
            self.TextBrowserGer.append(raw[1])
            self.SearchBar(raw[0].strip(),raw[1].strip())


    def SearchBar(self,keys,values):
        mydict = 
        AraKey = mydict[0]=[keys]
        GerKey = mydict[1]=[values]
        Model = QtGui.QStringListModel()
        ModAra = Model.setStringList(AraKey)
        ModGer = Model.setStringList(GerKey)
        completer = QtGui.QCompleter()
        CompAra = completer.setModel(ModAra)
        ComGer = completer.setModel(ModGer)
        self.LineEditAra.setCompleter(CompAra)
        self.LineEditGer.setCompleter(ComGer)

【问题讨论】:

【参考方案1】:

我找到了 .. 它必须将列表传递给 SearchBar 函数而不是字典 .. 所以这行得通..

    # first make an empty lists 
    self.AraList = [] 
    self.GerList = []
    for raw in cors.fetchall():
        self.AraList.append(raw[0]) # put all data in one list
        self.GerList.append(raw[1]) # " "
    self.SearchBar(self.AraList,self.GerList) # passing the lists to SearchBar Function 

def SearchBar(self,keys,values): 
    print(keys) #make sure its returns one big list , Lets try the keys first 
    ModAra = QtGui.QStringListModel()
    ModAra.setStringList(keys)
    ComAra = QtGui.QCompleter()
    ComAra.setModel(ModAra)
    self.LineEditAra.setCompleter(ComAra)
     # It worked just fine 

【讨论】:

【参考方案2】:

函数setModel()setCompleter() 是无效的,没有返回值。

你可以这样写:

    AraKey = ['a','ab','abc']
    ModAra = QtGui.QStringListModel()
    ModAra.setStringList(AraKey)
    ComAra = QtGui.QCompleter()
    ComAra.setModel(ModAra)
    self.LineEditAra.setCompleter(ComAra)

我试过了,真的很管用。

【讨论】:

感谢重播。但我知道如果我设置像 AraKey = ['a','ab','abc'] 这样的列表,它会起作用,但问题在于将键和值从数据库传递到 SearchBar 函数。它给了我其他结果 :( 我认为根本不起作用,因为键不是列表。所以我会找到一种方法先将其转换为列表。 无论如何,您对 setModel() 和 setCompleter() 的说明非常有帮助......谢谢

以上是关于Python PyQt QLineEdit 到搜索栏的主要内容,如果未能解决你的问题,请参考以下文章

Python PyQt5:如果 QLineEdit 为空,如何更改 QLabel 的颜色?

pyqt - 在 QLineEdit 中达到一定数量的字母后激活 QCompleter

《PyQT5软件开发 - 控件篇》第3章 单行文本框QLineEdit

如何使 Pyqt5 QLineEdit 只接受数字

PYQT5 qlineedit 隐藏后不显示

QLineEdit 对象的 PyQt 集合