/ टाइप करने के लिए / पैटर्न मिलान टिंकर चाइल्ड विजेट (winfo_children) (पायथन) - पायथन, टिंकर, विजेट, पैटर्न-मिलान

प्रकार मिलान (पायथन) निर्धारित करने के लिए पैटर्न मिलान Tkinter बाल विजेट (winfo_children) - पायथन, tkinter, विजेट, पैटर्न मिलान

मैं मूल विजेट में सभी एंट्री विजेट को अपने आप क्लियर करने की कोशिश कर रहा हूं।

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 समस्याओं में चल रहा हूँ

  1. जब मैं बच्चों के विजेट प्रकार का पता लगा सकता हूं, तो मैं "इसे एक पैटर्न मैच में उपयोग करने में सक्षम होने के लिए प्रतीत हो सकता हूं। नीचे दी गई सूची को मुद्रित करना [0] नीचे का शेल आउटपुट से अलग है?

उदाहरण के लिए:

>> 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
  1. मुझे लगता है कि प्रिंट आउटपुट और शेल आउटपुट के बीच अंतर के कारण, मेरा पैटर्न मैच "टी वर्क" कर सकता है?

उदाहरण के लिए

>> re.search(r"Entry",wlist[0])
<< No output >>
  1. मान लें कि एक पैटर्न मैच के माध्यम से यह पता लगाने में सक्षम है कि एक बच्चा विजेट वास्तव में एक एंट्री विजेट है, तो आपको डिलीट विधि कॉल करने के लिए विजेट ऑब्जेक्ट कैसे मिलेगा?

उदाहरण के लिए:

## 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)

उत्तर:

उत्तर № 1 के लिए 1

आम तौर पर आप उन्हें एक सूची या कुछ कंटेनर में संग्रहीत करते हैं।

entry_list=[E1, E2]

def clear_entry():
for id in entry_list:
id.delete(0,Tkinter.END)

उत्तर № 2 के लिए 1

आइटम वापस आ गए winfo_children() विगेट्स की एक सूची है। Tkinter विगेट्स में आपको अंतर्निहित विजेट क्लास बताने की एक विधि है: winfo_class.

>>> wlist[0].winfo_class()
"Entry"

आप बस वस्तु प्रकार की तुलना भी कर सकते हैं, जैसे आप किसी अन्य अजगर वस्तु से कर सकते हैं

>>> isinstance(wlist[0], Tkinter.Entry)
True

के परिणाम के बाद से winfo_children विगेट्स की एक सूची है, आप उन पर पुनरावृति कर सकते हैं और इस तरह के सभी एंट्री विजेट को साफ़ कर सकते हैं:

for widget in root.winfo_children():
if isinstance(widget, Tkinter.Entry):
widget.delete(0, "end")

जवाब के लिए 0 № 3

आप टाइपू का उपयोग करके देख सकते हैं

if 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

खोल का उपयोग repr() वस्तु को स्ट्रिंग में बदलना

print repr(wlist[0])

<Tkinter.Entry instance at 0x00000000151911C8>