簡體   English   中英

無法從標簽中刪除文本。 蟒蛇,Tkinter

[英]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()

您的代碼中幾乎沒有問題:

  • label1PrintPasTriangle()內部的局部變量,因此無法在函數外部訪問
  • 您對所有行都使用了相同的變量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.

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