ما هي الطريقة الصحيحة للتعامل مع الأحداث في PYQT 4؟

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

  •  19-09-2019
  •  | 
  •  

سؤال

لقد رأيت أمثلة مثل هذا:

self.connect(self.ui.add_button, QtCore.SIGNAL('clicked()'),self.printer)

وأمثلة مثل هذا:

self.ui.add_button.clicked.connect(self.printer)

أنا فقط بدأت تعلم QT؛ أي واحد يجب أن أركز عليه؟

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

المحلول

أعتقد أن المثال الثاني مدعوم فقط من قبل بعض إصدارات QT (الأحدث منها)، في حين أن الأول الذي يدعمه الأكبر سنا. ولكن كلاهما صحيح.

نصائح أخرى

AFAIK، النمط الأحدث لا يعمل إذا كانت هناك إشارات مثقلة، لذلك

self.ui.add_button.clicked.connect(self.printer)

لا يمكن استخدامها إذا كان هناك أيضا، على سبيل المثال،

clicked(float, float)

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

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

تحذير، لم أقم باختبار هذا الرمز، لقد نسخت للتو بعض مقتطفات الكود كتبت منذ بعض الوقت، لذلك قد يكون هناك بعض الأخطاء، لكنني آمل أن يساعد على أي حال

إشارات النمط الجديد في Pyqt لفترة وجيزة:

# notice that the signal declarations are at class level (not inside some method)

class MyClass(QObject):    # must subclass QObject (or subclass)

    # declaring signals
    mySimpleSignal = pyqtSignal()
    mySignalWithArguments = pyqtSignal(int, list)
    myOverloadedSignal = ([int, object],[str,object])

    def __init__(self, parent=None):
        super(MyClass,self).__init__(parent=parent)    # remember to init the super class
        [...]

    # methods
    [...]

    # connecting signals
    def connectSignalsMethod(self):
        # connecting simple signal
        self.mySimpleSignal.connect(self.mySlot)
        # connecting signal with arguments
        self.mySignalWithArguments.connect(self.mySlotWithArguments)
        # connecting overloaded signals
        self.myOverloadedSignal[int, object].connect(self.mySlot1)
        self.myOverloadedSignal[str, object].connect(self.mySLot2)

        # same syntax for disconnect()


    # emitting signals
    def emitSignalsMethod(self):
        # emitting simple signal
        self.mySimpleSignal.emit()
        # emitting signal with arguments
        self.mySignalWithArguments.emit(123,['this','is','a','list'])
        # emitting overloaded signal
        myOverloadedSignal[str,object].emit('this is a string', myObject)


    # my slots
    @pyqtSlot()
    def mySlot(self):
        print('hey!')

    @pyqtSlot(int, list)
    def mySlotWithArguments(self, someNumber, someList):
        print('got a number: %d and a list: %s' % (someNumber, someList))

    @pyqtSlot(int, object)
    def mySlot1(self, intArg, objectArg):
        print('got an int and an object')

    @pyqtSlot(str, object)
    def mySlot2(self, str, object):
        print('got a string and an object')

    # an overloaded slot
    @pyqtSignal(int)
    @pyqtSignal(str)
    def overloadedSlot(someArgument)
        print('got something: %s' % someArgument)

خلاف ذلك، جرب هذاhttp://www.harshj.com/2010/06/pyqt-faq-custom-signals-jpeg-mouse-hovers-and-mormore/#custom.

تحرير: الأحداث والإشارات ليست هي نفسها، ما تراه أعلاه هو حول الإشارات

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