2017-02-16 127 views
-2

我正在使用TKinter创建一个基本程序,允许我添加,更新,删除和查看我在个人图书馆中拥有的图书。我奋力的2份代码:在Tkinter GUI中显示不正确的行

  1. 当我点击查看记录,在GUI中的文本应显示记录列表,每个项目出现在自己的行。

  2. 它也不应该在每次按下按钮时重复列表。

    查看按钮

    view_records = Button(root, text="View Records", width=12, command=view_command) 
    view_records.grid(row=3,column=3,columnspan=2,sticky='w’) 
    
    def view_command(): 
        listings.delete(0,END) # does not duplicate entries for multiple clicks 
        for row in personal_library_backend.view(): 
         listings.insert(END,row) # this does not list rows per index 
    

这是我的后台脚本:

def insert(title, author, genre, year): 
    conn=sqlite3.connect("library.db") 
    cur=conn.cursor() 
    cur.execute("INSERT INTO books VALUES (NULL,?,?,?,?)",(title,author,genre,year)) 
    conn.commit() 
    conn.close() 

def view(): 
    conn=sqlite3.connect("library.db") 
    cur=conn.cursor() 
    cur.execute("SELECT * FROM books") 
    rows=cur.fetchall() 
    conn.close() 
    return rows 

当我运行程序时,我不断收到一个错误,指出“坏文本索引0”在view_command函数上。我似乎无法弄清楚。有人能指引我朝着正确的方向吗?文本组件的

+0

什么是“列表”?它是一个'Entry'小部件,一个'Text'小部件还是一个'LIstbox'小部件? –

+0

对不起,我应该提到...这是一个列表框。 –

+1

如果它是一个列表框,为什么你接受了向你展示如何更新'Text'小部件的答案? –

回答

3

指数应在one of these格式(即“line.column”tk.END等),您的0不适合任何这些的。

您应该更改删除线:

listings.delete("1.0", "end") #you can use END instead of "end" 

以删除文本组件的一切。

并且为了使每个row出现在新行上,只需在插入row后手动插入新行。

for row in personal_library_backend.view(): 
    listings.insert("end", row) 
    listings.insert("end","\n") 
#there is an extra new line at the end, you can remove it using 
txt.delete("end-1c", "end") 
+0

谢谢!这就是诀窍! –