البرمجة

إنشاء حركة فنية متنوعة باستخدام Tkinter في Python 3.5

في البداية، يشرفني أن أساعدك في تطوير وتحسين الكود الخاص بك في استخدام مكتبة Tkinter في لغة Python 3.5. سأقوم بتوجيهك عبر خطوات إجرائية لتحقيق الأهداف التي ذكرتها في استفسارك.

لتحقيق حركة الكرات بسرعات مختلفة وأحجام متنوعة، يمكنك تحديد سرعة وحجم عشوائي لكل كرة أثناء إنشاء القائمة self.balls. يمكنك استخدام وظيفة random.uniform للحصول على قيم عشوائية بين نطاقين. على سبيل المثال:

python
speed = random.uniform(1, 5) # قيم سرعة عشوائية بين 1 و 5 size = random.randint(10, 30) # حجم عشوائي بين 10 و 30 self.balls.append([ballObjectId, x1, y1, speed, size])

ثم، يمكنك تكييف دورة الرسم (animate) لتحديث إحداثيات الكرات بناءً على السرعة، وضبط حجم الكرة بناءً على الحجم:

python
def animate(self): for i in range(1000): for i in range(len(self.balls)): self.myCanvas.delete(self.balls[i][0]) self.balls[i][1] += random.randint(-2, 2) self.balls[i][2] += self.balls[i][3] # تحديث بناءً على السرعة x1, y1 = self.balls[i][1], self.balls[i][2] x2, y2 = x1 + self.balls[i][4], y1 + self.balls[i][4] # تحديث بناءً على الحجم self.balls[i][0] = (self.myCanvas.create_oval(x1, y1, x2, y2, fill='')) self.myCanvas.update()

بالقيام بهذه التغييرات، ستلاحظ أن الكرات الآن تتحرك بسرعات مختلفة وتظهر بأحجام متنوعة. لتحقيق عودة الكرات من الأعلى إلى الأسفل، يمكنك تحديد حد أدنى لإحداثيات y وإعادة تعيين الكرة إلى الأسفل عندما تتجاوز هذا الحد:

python
def animate(self): for i in range(1000): for i in range(len(self.balls)): self.myCanvas.delete(self.balls[i][0]) self.balls[i][1] += random.randint(-2, 2) self.balls[i][2] += self.balls[i][3] # إعادة تعيين الكرة للأسفل عندما تتجاوز الحد الأدنى if self.balls[i][2] > 400: self.balls[i][2] = random.randint(-30, -10) x1, y1 = self.balls[i][1], self.balls[i][2] x2, y2 = x1 + self.balls[i][4], y1 + self.balls[i][4] self.balls[i][0] = (self.myCanvas.create_oval(x1, y1, x2, y2, fill='')) self.myCanvas.update()

بهذه الطريقة، يمكنك تحقيق الحركة المستمرة للكرات من الأعلى إلى الأسفل. أتمنى أن يساعدك ذلك في تحسين البرنامج وتحقيق المتطلبات التي طلبتها.

المزيد من المعلومات

بالطبع، دعنا نستكشف بعض المفاهيم والتفاصيل الإضافية المتعلقة بالكود الخاص بك وكيفية تطويره بشكل أفضل.

أولاً، يمكننا مناقشة بعض التحسينات في هيكل الكود وكتابته. لتحسين قابلية الصيانة والقراءة، يمكنك تنظيم الكود بشكل أفضل وتقسيمه إلى وظائف فرعية. على سبيل المثال، يمكنك إنشاء وظيفة لإضافة الكرات ووظيفة لتحديث حركتها. هذا يمكن أن يجعل الكود أكثر تنظيمًا وفهمًا. إليك مثال:

python
import time import random from tkinter import * class Box(Frame): def __init__(self): Frame.__init__(self) self.pack() self.master.title("Canvas animation") self.master.geometry("400x400") # size in pixels label = Label(self, text=" Bubbles ") label.grid(row=1, column=1) self.myCanvas = Canvas(self) self.myCanvas.grid(row=2, column=1) self.myCanvas.config(bg='cyan', height=350, width=350) self.balls = [] # list of balls belongs to the Box self.add_balls() self.animate() def add_balls(self): for i in range(35): x1, y1 = random.randint(35, 315), random.randint(35, 315) speed = random.uniform(1, 5) size = random.randint(10, 30) ball_object_id = self.myCanvas.create_oval(x1, y1, x1 + size, y1 + size, fill='') self.balls.append([ball_object_id, x1, y1, speed, size]) def update_ball_position(self, ball): self.myCanvas.delete(ball[0]) ball[1] += random.randint(-2, 2) ball[2] += ball[3] if ball[2] > 400: ball[2] = random.randint(-30, -10) x1, y1 = ball[1], ball[2] x2, y2 = x1 + ball[4], y1 + ball[4] ball[0] = self.myCanvas.create_oval(x1, y1, x2, y2, fill='') def animate(self): for _ in range(1000): for ball in self.balls: self.update_ball_position(ball) self.myCanvas.update() def main(): Box().mainloop() if __name__ == "__main__": main()

هذا الشكل يجعل الكود أكثر هيكلة ويجعله أسهل للصيانة والفهم.

ثانيًا، يمكنك تحسين المظهر البصري للكرات عن طريق تعيين ألوان مختلفة أو استخدام صور للكرات بدلاً من أشكال دائرية بسيطة. يمكنك أيضًا استكشاف خيارات إضافية في مكتبة Tkinter لتحسين الرسومات والتفاعلية.

أتمنى أن تكون هذه الإضافات مفيدة لك، وإذا كنت بحاجة إلى أي مساعدة إضافية أو استفسارات، فلا تتردد في طرحها!

زر الذهاب إلى الأعلى