PYQT، كيو تي، معالج حدث واحد يعمل مع العديد من العناصر

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

  •  19-09-2019
  •  | 
  •  

سؤال

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

على سبيل المثال في دلفي يمكنني استخدامه بهذه الطريقة:

function click_handler(sender):
begin
    checked_box := sender.tag;
end;

هنا أتذكر رقم المربع المحدد الحالي في بعض المتغير (تم تعيين خاصية العلامات يدويا في Delphi IDE).

لقد بحثت ولا يمكنك العثور على كيف يمكنني تنفيذ هذا باستخدام QT، لأن معالجات الأحداث لا تملك sender جدال.

لقد قمت بذلك مثل هذا، لكنها ليست مريحة:

# assign handlers (n assignments)
checkbox_1.clicked.connect(self.cb_1_click)
...
checkbox_<n>.clicked.connect(self.cb_<n>_click)

# separate handler for each check box (n functions, doing the same stupid work)
def cb_1_click:
    self.cb_click(sender=1)
...
def cb_<n>_click:
    self.cb_click(sender=n)

# main check box click logic (1 function)
def cb_click(sender):
    # do something common for all checkboxes

شكرًا لك.

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

المحلول

يمكنك استخدام QOBJECT :: المرسل () في فتحات لمعرفة من ينبعث الإشارة.
أيضا قد ترغب في التحقق QSignalmapper. التي المقصود بالضبط لحل هذه المشاكل.

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