gpt4 book ai didi

python - 更新 tkinter 标签

转载 作者:行者123 更新时间:2023-11-30 22:46:35 25 4
gpt4 key购买 nike

我正在尝试更新标签,但我编写的代码每次都会创建一个新标签。我对 tkinter 比较陌生,所以我无法理解如何将其他答案应用到我的代码中。

from tkinter import *
import random

class Window(Frame):

def __init__(self, master=None):
Frame.__init__(self, master)
self.master=master
self.init_window()

def init_window(self):
self.pack(fill=BOTH, expand=1)
testButton=Button(self, text="Press", command=calc)
testButton.pack()
l1=Label(text="")

def testbutton(ans): #creates a new instance of l1 each time, I want to update existing l1
var=StringVar()
l1=Label(textvariable=var) #l1.configure() gives error l1 not defined
var.set(ans)
l1.pack()

def calc():
list1=["a","b","c"]
index=random.randint(0,2)
answer=list1[index]
Window.testbutton(answer)

root=Tk()
root.geometry("400x300")
app=Window(root)
root.mainloop()

每次按下按钮时,都会创建一个新标签,而不是更新现有标签上的文本。这是我的实际项目的简化版本,但用标签突出显示了问题。我尝试在 testbutton 函数中使用 l1.configure(...) 但随后它运行了 l1 未定义的错误。

最佳答案

为了避免每次创建新的Label,您需要创建一个标签并将其保存为Window 实例的属性。为了使其可供 calc() 函数访问,您还需要将 Window 实例作为参数传递给它(以避免使用全局变量)。使用 tkinter 执行此操作的一个常见原因是使用 lamba 函数作为 Buttoncommand= 参数并将 self 设置为其参数的默认值,如下所示。

from tkinter import *
import random

class Window(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.master = master
self.init_window()

def init_window(self):
self.pack(fill=BOTH, expand=1)
testButton = Button(self, text="Press",
command=lambda win=self: calc(win))
testButton.pack()
self.l1 = Label(text="")
self.l1.pack()

def testbutton(self, ans):
self.l1.configure(text=ans)

def calc(window): # note window argument added
list1 = ["a","b","c"]
index = random.randint(0,2)
answer = list1[index]
window.testbutton(answer)

root = Tk()
root.geometry("400x300")
app = Window(root)
root.mainloop()

关于python - 更新 tkinter 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40845920/

25 4 0