2013-07-10 23 views
7

GUI iş parçacığının ana bilgisayarın dışındaki bir Python iş parçacığından güncelleştirmenin bir yolunu bulmaya çalışıyorum. Sourceforge üzerindeki PyQt5 docs, bunun nasıl yapılacağı konusunda iyi talimatlara sahiptir. Ama hala işleri halledemiyorum.PyQt5 İşaretleri ve Yuvaları 'QObject' özniteliği yok 'hata

Aşağıdaki çıktıları etkileşimli bir oturumdan açıklamanın iyi bir yolu var mı? Bu nesneler üzerinde emit yöntemini çağırmanın bir yolu olmamalı mı?

>>> from PyQt5.QtCore import QObject, pyqtSignal 
>>> obj = QObject() 
>>> sig = pyqtSignal() 
>>> obj.emit(sig) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'QObject' object has no attribute 'emit' 

ve

>>> obj.sig.emit() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'QObject' object has no attribute 'sig' 

ve

>>> obj.sig = pyqtSignal() 
>>> obj.sig.emit() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'PyQt5.QtCore.pyqtSignal' object has no attribute 'emit' 
+1

burada aynı: [PyQt5 Ne modül içinde yayarlar yöntemi bulunur?] (Http://stackoverflow.com/questions/17581506/pyqt5-in-what-module-is-the-emit-method -found) - sadece __bound__ sinyalleri bir 'emit' yöntemine sahiptir. ('obj.sig = pyqtSignal()' hala bir bağlanmayan sinyaldir) – mata

+0

@mata: Evet, bu örnekleri Pyfort5 belgelerinden sourceforge'da alıyordum. [Http://stackoverflow.com/questions/17581506/pyfqt5-in-what-module-is-the-emit-method-found] adresinden bahsetmiş olduğunuz gibi, emit yöntemi bağlı bir sinyal içindir, yani QObject'ten devraldığı bir sınıfın üyesi. Yukarıda yapıştırılan etkileşimli oturumda bunu yapmadığımı farketmedim. – ADB

+0

@ mata: Sadece merak ettim, yukarıdaki üçüncü örnekte olduğu gibi ** obj.sig = pyqtSignal() ** 'nin faydası ne olurdu? – ADB

cevap

15

aşağıdaki kelime ve kodlar PyQt5 docs içindedir.

yeni sinyaller sadece QObject.They arasında dinamik sınıfı tanımlandıktan sonra sınıf özellikleri gibi ilave olamaz sınıf tanımının bir parçası olan ve olmalıdır alt sınıflara tanımlanmalıdır.

from PyQt5.QtCore import QObject, pyqtSignal 

class Foo(QObject): 

    # Define a new signal called 'trigger' that has no arguments. 
    trigger = pyqtSignal() 

    def connect_and_emit_trigger(self): 
     # Connect the trigger signal to a slot. 
     self.trigger.connect(self.handle_trigger) 

     # Emit the signal. 
     self.trigger.emit() 

    def handle_trigger(self): 
     # Show that the slot has been called. 

     print "trigger signal received" 
+0

Vay, bir yıldan sonra! Cevap kabul edildi (yukarıdaki yorumlarda soru açıklığa kavuşturulmuş olsa bile). – ADB

İlgili konular