在输入Entry小部件完成后,有没有办法让tkinter小部件更新?
https://i.stack.imgur.com/egSX6.png
最初的Elo程序是使用Access in Form完成的。当玩家条目被填满时,$表示的标签/条目将搜索数据库并显示信息。
GUI运行时是否有某种方法可以更新Label?它的触发器可能是Entry字段中的字符数为3个字符。我不知道如何在GUI运行后进行标签/条目更新是否可行。
编辑:
def update_winner():
cursor = conn.cursor()
winner = winner_id.get()
school = school_name.get()
temp = school+winner
if len(temp) == 5:
cursor.execute("SELECT Rating FROM KIDS WHERE LocalID = ?", temp)
rating=cursor.fetchval()
cursor.execute("SELECT FirstName FROM KIDS WHERE LocalID = ?", temp)
name=cursor.fetchval()
winner_name.set(name)
loser_id.trace("w",update_loser)
winner_id.trace("w",update_winner)
ratings.mainloop()
当我运行这样的代码时,只要我在wins_id框中输入文本,我就会收到此错误:TypeError:update_winner()获取0个位置参数,但是给出了3个
答案 0 :(得分:3)
您可以将StringVar
的实例与条目小部件相关联,然后对该变量进行跟踪。只要变量值发生更改,就会调用跟踪,只要用户键入条目小部件,值就会更改。
在调用的函数中,您可以使用configure
方法更改标签中显示的值。
这是一个简短的例子。在此示例中,当您键入条目小部件时,标签将更新以显示输入的内容。
import tkinter as tk
class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.v1 = tk.StringVar()
self.e1 = tk.Entry(self, textvariable=self.v1)
self.l1 = tk.Label(self)
self.e1.pack(side="top", fill="x")
self.l1.pack(side="top", fill="x")
self.v1.trace("w", self.on_change)
def on_change(self, *args):
self.l1.configure(text="You entered: '%s'" % self.v1.get())
root = tk.Tk()
Example(root).pack(fill="both", expand=True)
root.mainloop()
您当然可以在变量跟踪中执行任何操作,例如在数据库中查找值。