2013-07-10 43 views
7

Tôi đã cố gắng tìm cách cập nhật chuỗi GUI từ một chuỗi Python bên ngoài chính. PyQt5 docs trên sourceforge có hướng dẫn tốt về cách thực hiện điều này. Nhưng tôi vẫn không thể làm mọi thứ.Tín hiệu PyQt5 và lỗi 'QObject' không có thuộc tính '

Có cách nào tốt để giải thích kết quả sau đây từ một phiên tương tác không? Không nên có một cách để gọi phương pháp phát ra trên các đối tượng này?

>>> 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' 

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

>>> 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

giống như ở đây: [PyQt5 trong những mô-đun được phương pháp Emit tìm thấy?] (Http://stackoverflow.com/questions/17581506/pyqt5-in-what-module-is-the-emit-method -found) - chỉ các tín hiệu __bound__ có phương thức 'emit'. ('obj.sig = pyqtSignal()' vẫn là một tín hiệu không liên kết) – mata

+0

@mata: Vâng, tôi đã lấy những ví dụ này từ các tài liệu PyQt5 tại sourceforge. Như bạn đã chỉ ra (http://stackoverflow.com/questions/17581506/pyfqt5-in-what-module-is-the-emit-method-found), phương pháp phát ra là cho một tín hiệu bị ràng buộc, tức là nó là một thành viên của một lớp kế thừa từ QObject. Tôi đã không nhận ra rằng tôi đã không làm điều đó trong phiên tương tác dán ở trên. – ADB

+0

@ mata: Chỉ cần tò mò, những gì sẽ là tiện ích của ** obj.sig = pyqtSignal() **, như trong ví dụ thứ ba ở trên? – ADB

Trả lời

15

lời sau và mã đang PyQt5 docs.

tín hiệu mới nên chỉ được quy định tại phụ lớp của QObject.They phải phần của định nghĩa lớp và không thể động thêm vào như là thuộc tính lớp sau khi lớp học đã được xác định.

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

Chà, hơn một năm sau! Trả lời được chấp nhận (mặc dù câu hỏi đã được xóa trong các ý kiến ​​ở trên). – ADB

Các vấn đề liên quan