2012-08-15 140 views
0

我是python的新手,最近我用tkinter制作Python和Sqlite3的字典。 当我运行代码时,它会在IDLE中返回多行,但在GUI中它只显示最后的结果。我想在GUI中显示所有信息。感谢您的任何帮助和建议。python sqlite3,tkinter显示多行

import tkinter 
import sqlite3 
class Dictionary: 
def __init__(self,master =None): 
    self.main_window = tkinter.Tk() 
    self.main_window.title("Lai Mirang Dictionary") 
    self.main_window.minsize(600,400) 
    self.main_window.configure(background = 'paleturquoise') 
    self.frame1 = tkinter.Frame() 
    self.frame2= tkinter.Frame(bg = 'red') 
    self.frame3 =tkinter.Text(foreground = 'green') 
    self.frame4 = tkinter.Text() 


    self.lai_label = tkinter.Label(self.frame1,anchor ='nw',font = 'Times:12', text = 'Lai',width =25,borderwidth ='3',fg='blue') 
    self.mirang_label = tkinter.Label(self.frame1,anchor ='ne',font = 'Times:12', text = 'Mirang',borderwidth ='3',fg ='blue') 

    self.lai_label.pack(side='left') 
    self.mirang_label.pack(side = 'left') 

    self.kawl_buttom= tkinter.Button(self.frame2 ,fg = 'red',font = 'Times:12',text ='Kawl',command=self.dic,borderwidth ='3',) 

    self.lai_entry = tkinter.Entry(self.frame2, width= 28, borderwidth ='3',) 
    self.lai_entry.focus_force() 
    self.lai_entry.bind('<Return>', self.dic,) 
    self.lai_entry.configure(background = 'khaki') 


    self.lai_entry.pack(side='left') 
    self.kawl_buttom.pack(side = 'left') 

    self.value = tkinter.StringVar() 
    self.mirang_label= tkinter.Label(self.frame3,font = 'Times:12',fg = 'blue',textvariable = self.value,justify = 'left',wraplength ='260',width = 30, height = 15,anchor = 'nw') 
    self.mirang_label.pack() 
    self.mirang_label.configure(background = 'seashell') 


    self.copyright_label = tkinter.Label(self.frame4,anchor ='nw',font = 'Times:12:bold',text = "copyright @ [email protected]",width = 30,borderwidth = 3, fg = 'purple',) 
    self.copyright_label.pack() 

    self.frame1.pack() 
    self.frame2.pack() 
    self.frame3.pack() 
    self.frame4.pack() 


    tkinter.mainloop() 
    self.main_window.quit() 

def dic(self, event = None): 
    conn = sqlite3.connect('C:/users/christoe/documents/sqlite/laimirangdictionary.sqlite') 
    c = conn.cursor() 
    kawl = self.lai_entry.get() 
    kawl = kawl + '%' 
    c.execute("SELECT * FROM laimirang WHERE lai LIKE ?", (kawl,)) 
    c.fetchall  
    for member in c: 
     out = (member) 
     self.value.set(out) 
     print(out,) 


dic=Dictionary() 
+0

试'的结果= c.fetchall();为成员在结果'看到它的工作。 – 2012-08-15 02:44:36

+0

它在IDLE中工作,但在我的GUI中只显示最后一个结果,我希望它在我的GUI中显示更多项目(比如说5个项目)。请帮助我!我已经整整两周了。谢谢。 – user1599545 2012-08-16 21:12:42

回答

0

你需要改变:

c.execute("SELECT * FROM laimirang WHERE lai LIKE ?", (kawl,)) 
c.fetchall  
for member in c: 
    out = (member) 
    self.value.set(out) 
    print(out,) 

要:

for member in c.execute("SELECT * FROM laimirang WHERE lai LIKE ?", (kawl,)): 
    current_text = self.value.get() 
    new_text = current_text +("\n" if current_text else "") +" ".join(member) 
    self.value.set(new_text) 

新版本得到StringVar值的电流值,然后追加结果与其间的空间返回每一行在每行上都有自己的行。然而,你所做的只是将StringVar更新为当前成员对象,因此它只有最后一个值。

这是它的外观与多行:

This is what it currently looks like