2016-08-15 85 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的接口。从此,您只应通过界面对象访问小部件。这创造了更干净的代码。

相关问题