2016-08-21 156 views
0

正試圖建立翻譯,並把它放在一個搜索欄。與QLineEdit 和我想要的是自動完成這個詞。 .. 我試過了。但是這個代碼不工作,我在談論SearchBar功能。但其餘的代碼正好與其他程序一起工作。但SearchBar功能不起作用。並沒有完成我輸入的內容LineEditPython PyQt QLineEdit搜索欄

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) 

回答

0

我發現它..它必須通過一個列表,搜索欄的功能不是字典.. 所以此工程..

# 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 
0

函數setModel()和setCompleter()是void,不返回任何值。

文件:setModelsetCompleter

你可以這樣寫:

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

我HAVA嘗試這樣做,它確實有效。

+0

感謝重播。但我知道它會工作,如果我設置列表如 AraKey = ['a','ab','abc'] 但問題是將數據庫中的鍵和值傳遞給SearchBar函數。它給我其他resulte :(不工作,我認爲,因爲鍵不是一個列表,所以我會找到一種方法來首先將它轉換爲列表。 – PyCoder

+0

反正你關於setModel()和setCompleter()的說明 是非常有幫助..謝謝 – PyCoder