我正在尝试自动清除父窗口小部件中的所有Entry
窗口小部件。
import Tkinter
import re
root=Tkinter.Tk()
E1=Tkinter.Entry(root)
E1.pack()
E2=Tkinter.Entry(root)
E2.pack()
L1=Tkinter.Label(root,text='Label1')
L1.pack()
我遇到了3个问题
wlist[0]
与shell输出不同? 例如:
>> wlist=root.winfo_children()
>> wlist
[<Tkinter.Entry instance at 0x00000000151911C8>,
<Tkinter.Entry instance at 0x00000000151BAD88>,
<Tkinter.Label instance at 0x00000000151B29C8>]
>> wlist[0] # shell output
<Tkinter.Entry instance at 0x00000000151911C8>
>> print wlist[0] # print output here is different vs shell output above
.353964488L
例如
>> re.search(r'Entry',wlist[0])
<< No output >>
Entry
窗口小部件,那么如何让窗口小部件对象本身执行delete
方法调用?例如:
## Assuming I have a function to to clear the entry
## How would I pass the object from the pattern match in #2 to this function?
def clear_entry(objEntry):
objEntry.delete(0,Tkinter.END)
答案 0 :(得分:3)
从winfo_children()
返回的项目是小部件列表。 Tkinter小部件有一种方法可以告诉您底层的小部件类:winfo_class
。
>>> wlist[0].winfo_class()
'Entry'
您也可以简单地比较对象类型,就像您可以与任何其他python对象一样:
>>> isinstance(wlist[0], Tkinter.Entry)
True
由于winfo_children
的结果是小部件列表,您可以迭代它们并清除所有条目小部件,如下所示:
for widget in root.winfo_children():
if isinstance(widget, Tkinter.Entry):
widget.delete(0, "end")
答案 1 :(得分:1)
通常将它们存储在列表或某个容器中。
entry_list=[E1, E2]
def clear_entry():
for id in entry_list:
id.delete(0,Tkinter.END)
答案 2 :(得分:0)
您可以使用
查看typuif type(wlist[0]) == Tkinter.Entry: # True/False
或更好
if isinstance(wlist[0], Tkinter.Entry): # True/False
wlist[0]
是对象,所以你可以做到
wlist[0].delete(0,Tkinter.END)
和
clear_entry(wlist[0])
当您尝试打印对象时,使用str()
将对象转换为字符串
print str(wlist[0])
.353964488L
shell使用repr()
将对象转换为字符串
print repr(wlist[0])
<Tkinter.Entry instance at 0x00000000151911C8>