[英]Can't remove text from label. Python, Tkinter
無法理解我在這里做錯了什么。 一個名為 clearlabel 的函數應該從 label1 中清除文本,但它說它沒有定義。 你能告訴我我在這里做錯了什么嗎?
from tkinter import *
root = Tk()
w = (root.winfo_screenwidth() // 2) - 200
h = (root.winfo_screenheight() // 2) - 200
root.geometry('400x400+{}+{}'.format(w, h))
root.title("Pascal Triangle")
def PrintPasTriangle():
row = [1]
for i in range(int(ent.get())):
label1 = Label(root, text=row, font = "Times 10")
row = [sum(x) for x in zip([0]+row, row+[0])]
label1.pack()
ent = Entry(root, width=50)
ent.pack()
ent.insert(0, "")
def clearlabel():
label.delete("0", END)
myButton = Button(root, text="Show Triangle", font = "Times 10", command=PrintPasTriangle)
myButton.pack()
myButton2 = Button(root, text="Clear Triangle", font = "Times 10", command=clearlabel)
myButton2.pack()
我不是專家,但我相信label1
丟失了,因為它不是全球性的
您可以向root
詢問它包含的所有widgets
,然后destroy
labels
。
from tkinter import *
root = Tk()
w = (root.winfo_screenwidth() // 2) - 200
h = (root.winfo_screenheight() // 2) - 200
root.geometry('400x400+{}+{}'.format(w, h))
root.title("Pascal Triangle")
def PrintPasTriangle():
row = [1]
for i in range(int(ent.get())):
label1 = Label(root, text=row, font = "Times 10")
row = [sum(x) for x in zip([0]+row, row+[0])]
label1.pack()
ent = Entry(root, width=50)
ent.pack()
ent.insert(0, "")
def clearlabel():
#label1.delete("0", END)
for widget in root.winfo_children():
if isinstance(widget, Label):
widget.destroy()
myButton = Button(root, text="Show Triangle", font = "Times 10", command=PrintPasTriangle)
myButton.pack()
myButton2 = Button(root, text="Clear Triangle", font = "Times 10", command=clearlabel)
myButton2.pack()
您的代碼中幾乎沒有問題:
label1
是PrintPasTriangle()
內部的局部變量,因此無法在函數外部訪問label1
,因此只引用了最后一個clearlabel()
中使用了label
而不是label1
.delete(0, END)
我建議在 Pascal Triangle 的函數之外創建label1
而不是使用多個標簽並使用.config()
在兩個函數內更新其文本
...
def PrintPasTriangle():
row = [1]
triangle = '1'
for i in range(1, int(ent.get())):
row = [sum(x) for x in zip([0]+row, row+[0])]
triangle += "\n" + " ".join(str(x) for x in row)
label1.config(text=triangle)
...
def clearlabel():
label1.config(text='')
...
label1 = Label(root, font="Times 12")
label1.pack()
root.mainloop()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.