2016-08-15 88 views
0

如果我將一個變量(在本例中爲b)分配給一個按鈕並將其放在屏幕上,然後將其重新分配給另一個數據類型,那麼如何訪問該按鈕以便它可以被刪除或以其他方式引用至?我想這個問題可能會被問及任何數據類型或對象,但這種情況是突出的,因爲該按鈕留在屏幕上。例如:如何將對象重新分配給python中的變量?

import tkinter as tk 

root=tk.Tk() 
root.geometry('300x300') 

b=tk.Button(root, text="button b") 
b.pack() 
b=1 

root.mainloop() 

回答

1

...再後來重新分配b鍵另一種數據類型,我怎麼訪問按鈕,這樣可以將其刪除或以其他方式簡稱?

簡答:你不能。爲了引用某些東西,你必須保留一個參考。話雖如此,tkinter提供了一些替代品。 。

如果你想指在回調的按鈕,你可以通過它在這需要創建按鈕,然後在單獨的步驟定義回調:

b = tk.Button(...) 
b.configure(command=lambda button=b: do_something) 
... 
def do_something(button): 
    print("the widget is:", button) 

另外,如果你'使用綁定,當綁定函數被調用時,它將傳遞一個事件對象,該對象具有包含對該控件的引用的屬性。

b.bind("<1>", do_something) 
... 
def do_something(event): 
    print("the widget is:", event.widget) 

最後,你可以問的Tkinter的子控件(如:root.winfo_children)的列表,如果你知道你是否用過packplacegrid,您可以使用slaves方法來查詢所有的一個特定的容器內被管理的窗口小部件(例如:root.grid_slaves()root.pack_slaves()root.place_slaves()

1

用另一個賦值在某處保存引用。

b = tk.Button(root, text="button b") 
saved = b 
b = 1 
saved.pack() 
1

可以訪問根窗口的所有小工具與方法:

list_of_widgets = root.pack_slaves() 

然後檢查對象的類型。 (這不是一個好習慣......) 因此,我建議您將所需的引用保存在一個單獨的對象中,以明確地從您的應用程序中分離tkinter的接口。從此,您只應通過界面對象訪問小部件。這創造了更乾淨的代碼。

相關問題