2013-04-05 5 views
25

जब मैं का उपयोग कर एक आकार आकर्षित:टिंकर कैनवास को कैसे साफ़ करें?

canvas.create_rectangle(10, 10, 50, 50, color="green") 

Tkinter तथ्य का ट्रैक रखने कि यह बनाया गया था करता है?

एक सरल खेल मैं बना रहा हूं में, मेरा कोड एक Frame आयतों का एक समूह बनाने के लिए, और फिर स्क्रीन स्पष्ट करने के लिए एक बड़ा काला आयत और फिर अपडेट आयतों का एक और सेट आकर्षित, और इतने पर है।

क्या मैं स्मृति में हजारों आयताकार वस्तुओं को बना रहा हूं?

मुझे पता है कि आप ऊपर दिए गए कोड को एक चर के लिए असाइन कर सकते हैं, लेकिन अगर मैं ऐसा नहीं करता हूं और सीधे कैनवास पर आकर्षित करता हूं, तो यह स्मृति में रहता है, या यह सिर्फ पिक्सल खींचता है, जैसे HTML5 में कैनवास?

उत्तर

47

प्रत्येक कैनवास आइटम एक ऑब्जेक्ट है जो टिंकर का ट्रैक रखता है। यदि आप सिर्फ काले आयताकार चित्रण करके स्क्रीन को साफ़ कर रहे हैं, तो आपने प्रभावी रूप से मेमोरी रिसाव बनाया है - अंततः आपके प्रोग्राम को खींचे गए लाखों आइटमों के कारण क्रैश हो जाएगा।

कैनवास साफ़ करने के लिए, delete विधि का उपयोग करें। यह विशेष पैरामीटर "all" कैनवास पर सभी आइटम हटाना दें (स्ट्रिंग "all" "एक विशेष टैग कि कैनवास पर सभी वस्तुओं का प्रतिनिधित्व करता है):

canvas.delete("all") 

आप कैनवास पर केवल कुछ वस्तुओं को हटाना चाहते हैं (इस तरह के अग्रभूमि वस्तुओं के रूप में है, जबकि प्रदर्शन पर पृष्ठभूमि वस्तुओं) छोड़ने आप टैग प्रत्येक आइटम। तब करने के लिए, "all" की असाइन कर सकते हैं इसके बजाय, आप एक टैग का नाम आपूर्ति कर सकता है।

आप एक खेल बना रहे हैं, तो आप शायद आइटम को हटाने और पुन: बनाने की आवश्यकता नहीं है। उदाहरण के लिए, यदि आपके पास स्क्रीन पर चलने वाली कोई ऑब्जेक्ट है, तो आप move याका उपयोग कर सकते हैं आइटम को स्थानांतरित करने के लिएविधि।

3

कैनवास के लिए खींचे गए आइटम लगातार हैं। create_rectangle एक आइटम आईडी देता है जिसे आपको ट्रैक रखने के लिए आवश्यक है। यदि आप पुरानी वस्तुओं को नहीं हटाते हैं तो आपका प्रोग्राम अंततः धीमा हो जाएगा।

फ्रेड्रिक Lundh के An Introduction to Tkinter से:

ध्यान दें कि कैनवास को जोड़ा गया आइटम जब तक आप उन्हें निकाल रखा जाता है। आप ड्राइंग बदलना चाहते हैं , आप या तो coords, itemconfig, और move की तरह उपयोग तरीकों वस्तुओं में परिवर्तन, या delete करने के लिए उपयोग उन्हें हटाने के लिए कर सकते हैं।

+0

क्या दृढ़ता से आकर्षित करने का कोई तरीका है? –

+1

@ टेलरहिल: नहीं, लेकिन डेव के रूप में वैज्ञानिक आप अपने कैनवास विजेट एकत्र करने के लिए कैनवास टैग का उपयोग कर सकते हैं। तर्क 'टैग =' my_tag'' तर्क जोड़ने वाला विजेट बनाएं। फिर जब आप स्क्रीन को साफ़ करना चाहते हैं तो आप 'canvas.delete (' my_tag ') कर सकते हैं। 'My_tag'' के साथ टैग किए गए सभी कैनवास विजेट हटा दिए जाएंगे। –

1

हाँ, मुझे विश्वास है कि आप हजारों ऑब्जेक्ट्स बना रहे हैं। यदि आप एक बार में उनमें से एक समूह को हटाने का एक आसान तरीका ढूंढ रहे हैं, तो कैनवास टैग described here का उपयोग करें। यह आपको बड़ी संख्या में ऑब्जेक्ट्स पर एक ही ऑपरेशन (जैसे हटाना) करने देता है।

+0

यदि मैं एक ही आईडी को एक टाइल "जैसे" टाइल "असाइन करता हूं, और मैं आईडी" टाइल "पर डिलीट विधि करता हूं, तो क्या यह सब एक बार में हटा देता है? –

+0

@ टेलरहिल: हाँ। –

संबंधित मुद्दे