簡體   English   中英

如何在tkinter和python中刷新標簽

[英]How do you refresh a label in tkinter and python

我正在嘗試創建一個小窗口,告訴我前十名玩家的資金狀況。 問題是,每當我按下“更新”按鈕時,它都不會刪除播放器標簽的舊列表。 tkinter中有明確的功能嗎?

碼:

from tkinter import *
import sqlite3
def getlist():

    conn = sqlite3.connect('C:\sqlite\crapsdatabase.db')
    c = conn.cursor()

    c.execute("SELECT playerName, playerBank FROM player ORDER BY playerBank desc limit 10")
    temp = c.fetchall()
    for row in temp:
        texthold = str(row[0]) + ' ' + str(row[1])
        print(texthold)
        player = Label(root, text=texthold)
        player.pack()


    conn.commit() #confirms changes to the databae
    c.close() #closes the connection to the database
    conn.close()

root =Tk()

theLabel =Label(root, text="Top Ten Players")



buttonUpdate = Button(root, text="Update", fg="green", command = getlist)
buttonUpdate.pack()

theLabel.pack()
root.mainloop()

代替創建新的Label ,您應該使用player.config(text="Some new value")方法。 (您將需要在全局變量中保留對Label的引用)。

Nb由於您有多個標簽,因此應在列表中保留對Label對象的引用。

由於getlist()為每個項目創建一個新的Label ,因此一種方法是從窗口(和內存)中刪除以前的列表,並生成一個新的播放器列表(和標簽)。

我們需要保留對創建的標簽的引用(在getlist() ),以便稍后我們可以將其刪除。 類似於以下代碼(嘗試更改為所討論代碼示例的最小值):

from tkinter import *
import sqlite3

top_list = [] # holds the player labels currently shown

def getlist():
    global top_list

    conn = sqlite3.connect('C:\sqlite\crapsdatabase.db')
    c = conn.cursor()    
    c.execute("SELECT playerName, playerBank FROM player ORDER BY playerBank desc limit 10")
    temp = c.fetchall()

    for player in top_list:
        player.pack_forget() # remove label from window
    top_list = [] # remove references to free memory

    for row in temp:
        texthold = str(row[0]) + ' ' + str(row[1])
        print(texthold)
        player = Label(root, text=texthold)
        player.pack()
        top_list.append(player)

    conn.commit() #confirms changes to the databae
    c.close() #closes the connection to the database
    conn.close()

root = Tk()

theLabel = Label(root, text="Top Ten Players")
buttonUpdate = Button(root, text="Update", fg="green", command=getlist)
buttonUpdate.pack()

theLabel.pack()
root.mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM