كيف يمكنني ربط حدث بزر الفأرة الأيسر الذي تم الضغط عليه باستمرار؟

StackOverflow https://stackoverflow.com/questions/3288001

  •  17-09-2020
  •  | 
  •  

سؤال

أحتاج إلى تنفيذ أمر طالما استمر الضغط على زر الماوس الأيسر.

هل كانت مفيدة؟

المحلول

انظر الجدول 7-1 من المستندات.هناك أحداث تحدد الحركة أثناء الضغط على الزر، <B1-Motion>, <B2-Motion> إلخ.

إذا كنت لا تتحدث عن حدث الضغط والتحرك، فيمكنك البدء في ممارسة نشاطك عليه <Button-1> والتوقف عن فعل ذلك عندما تتلقى <B1-Release>.

نصائح أخرى

إذا كنت تريد "أن يحدث شيء ما" دون أي أحداث متداخلة (على سبيل المثال:دون قيام المستخدم بتحريك الماوس أو الضغط على أي أزرار أخرى) خيارك الوحيد هو الاستطلاع.قم بتعيين العلم عند الضغط على الزر، وقم بإلغاء تعيينه عند تحريره.أثناء الاقتراع، تحقق من العلامة وقم بتشغيل التعليمات البرمجية الخاصة بك إذا تم ضبطها.

وهنا شيء لتوضيح هذه النقطة:

import Tkinter

class App:
    def __init__(self, root):
        self.root = root
        self.mouse_pressed = False
        f = Tkinter.Frame(width=100, height=100, background="bisque")
        f.pack(padx=100, pady=100)
        f.bind("<ButtonPress-1>", self.OnMouseDown)
        f.bind("<ButtonRelease-1>", self.OnMouseUp)

    def do_work(self):
        x = self.root.winfo_pointerx()
        y = self.root.winfo_pointery()
        print "button is being pressed... %s/%s" % (x, y)

    def OnMouseDown(self, event):
        self.mouse_pressed = True
        self.poll()

    def OnMouseUp(self, event):
        self.root.after_cancel(self.after_id)

    def poll(self):
        if self.mouse_pressed:
            self.do_work()
            self.after_id = self.root.after(250, self.poll)

root=Tkinter.Tk()
app = App(root)
root.mainloop()

لكن, ، الاستقصاء ليس ضروريًا بشكل عام في تطبيق واجهة المستخدم الرسومية.ربما تهتم فقط بما يحدث أثناء الضغط على الماوس و يتحرك.في هذه الحالة، بدلاً من وظيفة الاستقصاء، قم ببساطة بربط do_work بـ a <B1-Motion> حدث.

استخدم أحداث نقل الماوس / الحركة وتحقق من إشارات المعدل.سوف تظهر أزرار الماوس هناك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top