我正在尝试创建一个小窗口,以告诉我前十名玩家的资金状况。问题是,每当我按下“更新”按钮时,它都不会删除播放器标签的旧列表。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()
由于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()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句