如果我在啟動這個小程式后點擊按鈕' xxx ',它會破壞視窗的所有小部件,除了按鈕' greet me '......應該......但是如果我在黃色的輸入欄位中寫一些東西然后點擊'打招呼' ,然后在' xxx '上......然后由于某種原因,修改后的'label_x'將不再被洗掉......另外,如果我在輸入框中多次寫一些名字,然后點擊'打招呼'它只是寫在前一個標簽上,首先要銷毀/洗掉它。為什么會這樣,如何解決?
from tkinter import *
root = Tk()
# Creating an entry box
entry_box = Entry(root, width=10, relief="solid", bg="yellow" )
entry_box.grid(column=0, row=0)
entry_box.insert(3, "type name")
# Creating label widgets
label_x = Label(root, text="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
label_x.grid(column=0, row=2)
label_minus = Label(root, text="------------------------------")
label_minus.grid(column=0, row=3)
def greeter():
label_x = Label(root, text="Welcome " entry_box.get())
label_x.grid(column=0, row=2)
# Creating greeter button
myButton = Button(root, text="greet me", command = lambda: [label_x.destroy(), greeter()])
myButton.grid(column=0, row=1)
x = Button(root, text="xxx", command = lambda: [label_x.destroy(), entry_box.destroy(), label_minus.destroy()])
x.grid(column=0, row=4)
root.mainloop()
uj5u.com熱心網友回復:
每次呼叫 greeter() 函式時,都會創建一個新的 label_x 實體。與全域 label_x 變數不同的 label_x。
一個快速的解決方法是將 label_x 宣告為 greeter() 函式內的全域變數。像這樣:
def greeter():
global label_x
label_x = Label(root, text="Welcome " entry_box.get())
label_x.grid(column=0, row=2)
它可能不是最好的解決方案,但它應該可以作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/439072.html
