How to find an object existing?

Christian Gollwitzer auriocus at gmx.de
Thu Jun 14 01:20:22 EDT 2018


Am 14.06.18 um 05:14 schrieb huey.y.jiang at gmail.com:
> root = Tkinter.Tk()
> button = Tkinter.Button(root, text="Find me")
> button.pack()
> 
> I created a button, Python object. I recall I can check this object existing by using   winfo, such as  winfo.exists(button). However, I forgot which super class contains this   winfo   method.  I printed out dir(os), dir(sys), dir(Tkinter), but did not find this winfo method. I wonder who will be kindly drop down a few lines? 
This is due to a bad wrapping of the original Tcl interface of Tk. In 
the original Tcl, "winfo" is not a method of anything, it is a free 
function. In TkInter, all free functions that accept a widget as the 
first parameter were made methods of that widget. Therefore, 
"winfo_exists" is a method of "button", which is logically contorted: 
you are asking an object "do you exist?".

However, since it can be explicitly destroyed, this can still be useful:

 >>> import Tkinter
 >>> root = Tkinter.Tk()
 >>> button = Tkinter.Button(root, text="Find me")
 >>> button.pack()
 >>> button.winfo_exists()
1
 >>> button.destroy()
 >>> button.winfo_exists()
0

I am not sure that this is very helpful, though. Usually you don't 
destroy a button yourself, it is done by the destructor when the button 
is deleted, and therefore, winfo_exists() under normal circumstances 
returns true. What are you really trying to achieve?

	Christian



More information about the Python-list mailing list