दिलचस्प पोस्ट
सूर्य जेडीके का स्रोत कोड कहां देख सकता हूं? एक पिक्सेल के एक्स, वाई एक छवि से रंग समन्वय कैसे प्राप्त करें? रिलीज कुंजी हैश के साथ फेसबुक लॉगिन के लिए ऐप का गलत कॉन्फ़िगर किया गया है एकाधिक गतिविधियों से Google प्लस क्लाइंट तक पहुंचें क्या टुपर को फोन करने से पहले अहस्ताक्षरित चारों को डालने की आवश्यकता है? मैं पाइथन 3 कर्नेल को ज्यूपिटर (आईप्याथॉन) में कैसे जोड़ूं? एक "प्रतीक नहीं मिल सकता है" संकलन त्रुटि क्या है? एंड्रॉइड: अज्ञातहास्ट अपवाद बहु मूल्य शब्दकोश HttpWebRequest अत्यंत धीमी है! ऑब्जेक्ट प्रॉपर्टी को दूसरे ऑब्जेक्ट में डुप्लिकेट कैसे करें? क्या संबंधों के साथ काम करने के लिए __ स्वीकार किए जाते हैं? स्ट्रिंग को रिवर्स करने का सर्वोत्तम तरीका मैं अस्थायी चर का उपयोग किए बिना फ़ंक्शन से दूसरा वापसी मान कैसे प्राप्त करूं? मैं कॉर्डोबा ऐप में उपयोगकर्ता एजेंट कैसे सेट कर सकता हूं

टंकिनर कैनवास में गेंदें बढ़ाना

यह एक बहुत ही बुनियादी कार्यक्रम है जिसके साथ मैं दो चलती गेंदें बनाना चाहता हूं, लेकिन उनमें से केवल एक वास्तव में चलता है

मैंने कुछ बदलावों की कोशिश की है, लेकिन दूसरी गेंद चलती नहीं जा सकती; एक अन्य संबंधित प्रश्न – कुछ लोग इस लक्ष्य को प्राप्त करने के लिए move(object) विधि का उपयोग करते हैं, जबकि अन्य एक delete(object) और फिर इसे फिर से दोहराते हैं। मैं किस का उपयोग करना चाहिए और क्यों?

यह मेरा कोड है जो केवल एक गेंद को एनिमेटिंग / चलाना है:

 from Tkinter import * class Ball: def __init__(self, canvas, x1, y1, x2, y2): self.x1 = x1 self.y1 = y1 self.x2 = x2 self.y2 = y2 self.canvas = canvas self.ball = canvas.create_oval(self.x1, self.y1, self.x2, self.y2, fill="red") def move_ball(self): while True: self.canvas.move(self.ball, 2, 1) self.canvas.after(20) self.canvas.update() # initialize root Window and canvas root = Tk() root.title("Balls") root.resizable(False,False) canvas = Canvas(root, width = 300, height = 300) canvas.pack() # create two ball objects and animate them ball1 = Ball(canvas, 10, 10, 30, 30) ball2 = Ball(canvas, 60, 60, 80, 80) ball1.move_ball() ball2.move_ball() root.mainloop() 

Solutions Collecting From Web of "टंकिनर कैनवास में गेंदें बढ़ाना"

आपको जीयूआई प्रोग्राम के अंदर कभी भी अनंत लूप नहीं लगाया जाना चाहिए – पहले से ही एक अनंत लूप चल रहा है। यदि आप अपनी गेंदों को स्वतंत्र रूप से स्थानांतरित करने के लिए चाहते हैं, तो बस पाश को बाहर move_ball और move_ball विधि को ईवेंट लूप पर एक नया कॉल दें। इसके साथ, आपकी गेंदें हमेशा के लिए आगे बढ़ना जारी रखती हैं (जिसका अर्थ है कि आपको ऐसा करने से रोकने के लिए कुछ प्रकार की जांच करनी चाहिए)

मैंने अपने कार्यक्रम को असीमित लूप को हटाकर, एनीमेशन को थोड़ी धीमा कर, और दिशा में चलने के लिए यादृच्छिक मानों का उपयोग करके कुछ भी बदल दिया है। उस परिवर्तन के सभी move_ball विधि के अंदर हैं move_ball

 from Tkinter import * from random import randint class Ball: def __init__(self, canvas, x1, y1, x2, y2): self.x1 = x1 self.y1 = y1 self.x2 = x2 self.y2 = y2 self.canvas = canvas self.ball = canvas.create_oval(self.x1, self.y1, self.x2, self.y2, fill="red") def move_ball(self): deltax = randint(0,5) deltay = randint(0,5) self.canvas.move(self.ball, deltax, deltay) self.canvas.after(50, self.move_ball) # initialize root Window and canvas root = Tk() root.title("Balls") root.resizable(False,False) canvas = Canvas(root, width = 300, height = 300) canvas.pack() # create two ball objects and animate them ball1 = Ball(canvas, 10, 10, 30, 30) ball2 = Ball(canvas, 60, 60, 80, 80) ball1.move_ball() ball2.move_ball() root.mainloop() 

यह समारोह अपराधी लगता है

 def move_ball(self): while True: self.canvas.move(self.ball, 2, 1) self.canvas.after(20) self.canvas.update() 

जब आप इसे कहते हैं, आप जानबूझ कर अपने आप को अनंत लूप में डालते हैं।

 ball1.move_ball() # gets called, enters infinite loop ball2.move_ball() # never gets called, because code is stuck one line above 

इसका एकमात्र चलना क्योंकि प्रोग्राम एक समय में केवल एक चर को पढ़ता है। यदि आप प्रोग्राम को पढ़ने के लिए सेट करते हैं, तो गेंद को किसी खास स्थान पर ले जाता है, तो कैनवास के अंत का कहना है, तो आप अगले लाइन को पढ़ने के लिए कार्यक्रम को कोडित कर सकते हैं और दूसरी गेंद को स्थानांतरित करने के लिए ट्रिगर कर सकते हैं। लेकिन, यह केवल एक समय में एक ही स्थानांतरित होगा

आपका प्रोग्राम वाकई लाइन पर अटक गया है:

ball1.move_ball()

और यह लाइन पर कभी नहीं मिलेगा:

ball2.move_ball()

क्योंकि इसमें कोई सीमा नहीं है जहां लूप समाप्त होना चाहिए।

अन्यथा, "सुंदर नटराज" का जवाब ऐसा करेगा।

self.canvas.move(self.ball, 2, 1) बजाय उपयोग करें

 self.canvas.move(ALL, 2, 1) 

यह सब कैनवास में सभी वस्तुओं को स्थानांतरित करने के लिए प्रयोग किया जाता है