الواجهة الرسومية في بايثون 5 - تتبع الضغط على الماوس

تختلف وسائل إيصال الأوامرالتي يطلبها المستخدم من البرنامج سواء عبر إعطائه المعطيات ثم الضغط على زر معين من لوحة المفاتيح كما في المرة السابقة أو عبر الضغط على مكان معين بواسطة الماوس.
سنتعرف على برنامج بسيط لتتبع مكان الماوس على النافذة.




# -*- coding:Latin-1 -*-
# Détection et positionnement d'un clic de souris dans une fenêtre :
from Tkinter import *
def pointeur(event):
    chaine.configure(text = "Clic détecté en X =" + str(event.x) +\
                            ", Y =" + str(event.y))
fen = Tk()
cadre = Frame(fen, width =200, height =150, bg="light yellow")
cadre.pack()
cadre.bind("<Button-1>", pointeur)
chaine = Label(fen)
chaine.pack()
fen.mainloop()


في الوظيفة التي أسميناها pointeur أضفنا ال event لتلقي الأحداث, بالداخل نجد النص الذي سيظهر أسفل الشاشة و كما نعلم أي نقطة داخل انفذة تحدد إحداثياتها عبر المعطيين x و y و بما أننا لن ندخلهما بأنفسنا بل عبر الماوس فهو سيقوم بقرائتها كما في المثال أي event.x مع تحويلهما إلى الصيغة النصية كما فعلنا سابقا عبر str.
نقوم لاحقا بعمل النافذة و تحديد إحداثياتها ليتبقى لنا أمر وحيد و هو تشغيل الوظيفة التي جهزناها سابقا عبر
cadre.bind("<Button-1>", pointeur)
مع التذكير بأن Button-1 تتغير بحسب وسيلة الإدخال التي سنستعملها سواءا عبر الماوس أو لوحة المفاتيح أي أن الإختلاف الرئيسي بين هذا المثال و المثال السابق يكمن في هذه النقطة.

كما ترون المثال سهل و لكن أود تقديم تمرين لفهم أفضل.
التمرين يتمثل في تغيير الكود بالأعلى ليرسم لنا دائرة حمراء بدل إعطائنا إحداثيات النقطة, نبدأ أولا بتغيير Frame ب Canvas.

سأترك الحل للتحميل و لكن يجب المحاولة فيه أولا و إن لم يعمل البرنامج فالأمر اﻷساسي عند البرمجة هي طريقة التفكير الصحيحة و ليس الكود الصحيح ,