【问题标题】:Python PyQt QLineEdit to Search barPython PyQt QLineEdit 到搜索栏
【发布时间】: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)

【问题讨论】:

    标签: python pyqt4 pyqt5


    【解决方案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() 的说明非常有帮助......谢谢
      猜你喜欢
      • 2017-03-19
      • 1970-01-01
      • 2014-04-19
      • 2016-01-03
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      • 2014-02-07
      • 1970-01-01
      相关资源
      最近更新 更多