البرمجة

الحصول على إحداثيات النقر بواسطة Python

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

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

فيما يلي التعديلات التي يجب إجراؤها على الشيفرة:

python
import matplotlib.pyplot as plt # تحديد الدالة onclick قبل دخول الحلقة def onclick(event): global ix, iy, coords, cid, fig ix, iy = event.xdata, event.ydata coords.append((ix, iy)) if len(coords) == 1: fig.canvas.mpl_disconnect(cid) plt.close() # تحديد عدد الصور nb_images = 5 # تهيئة الشكل مرة واحدة قبل الحلقة plt.ion() fig = plt.figure() # الحلقة for j in range(nb_images): coords = [] # Affichage plt.imshow(img[j], cmap="gray") plt.draw() # ربط الدالة onclick بالشكل cid = fig.canvas.mpl_connect('button_press_event', onclick) # انتظار النقرة plt.show() print(coords[0][0], coords[0][1]) # تحرير الشكل بعد الانتهاء من النقر plt.close()

بهذا التعديل، سيتم إنشاء الشكل مرة واحدة قبل الحلقة، ثم يتم استخدامه في كل تكرار من الحلقة. ستتمكن من النقر على الصورة في كل مرة والحصول على الإحداثيات بدون مشاكل.

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

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

الكود الذي قدمته يبدو أنه يستخدم مكتبة matplotlib في Python لعرض صور والسماح للمستخدم بالنقر عليها للحصول على إحداثيات النقر. الهدف من الكود هو عرض سلسلة من الصور (عدد الصور محدد مسبقًا بواسطة nb_images) وتسجيل إحداثيات النقر على كل صورة.

لفهم الكود بشكل أعمق، إليك شرح لكل جزء:

  1. تعريف الدالة onclick: هذه الدالة تقوم بتسجيل إحداثيات النقر عندما ينقر المستخدم على الصورة. تستخدم متغيرات عالمية لتخزين إحداثيات النقر وقائمة coords لتخزين جميع النقرات.

  2. تهيئة الشكل: يتم تهيئة الشكل الرسومي باستخدام plt.figure() مرة واحدة قبل دخول الحلقة. هذا يضمن أن يتم إنشاء الشكل مرة واحدة فقط ويتم إعادة استخدامه في كل تكرار من الحلقة.

  3. الحلقة: يتم استخدام حلقة for للتكرار عبر كل الصور المراد عرضها. داخل كل تكرار، يتم عرض الصورة باستخدام plt.imshow() ومن ثم ربط الدالة onclick بحدث النقر على الصورة باستخدام fig.canvas.mpl_connect().

  4. انتظار النقرة والإخراج: بمجرد عرض الصورة، ينتظر الكود حدوث النقرة على الصورة. بعد النقرة، يتم طباعة إحداثيات النقرة وإغلاق الشكل.

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

مقالات ذات صلة

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

أنت تستخدم إضافة Adblock

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