2012-06-30 19 views
6

, iki soru geldi:PyQt4 @pyqtSlot: sonuç kwarg ne için? <a href="http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/new_style_signals_slots.html#PyQt4.QtCore.pyqtSlot" rel="nofollow">this</a> okuyarak

1. O

açıkça While I bir Qt yuvası

olarak bir Python yöntemi işaretlemek için bazen gerekli olduğunu söylüyor her zaman @pyqtSlot dekoratörünü kullanın çünkü o diyor ki:

Conne Ayrıca kullanılan bellek miktarını azaltma avantajına sahiptir ve biraz daha hızlı olan bir dekore Python yöntemine bir sinyal cting

kendime soruyorum: hangi özel durumlarda gereklidir? ve: @pyqtSlot dekoratörünü kullanmamanın herhangi bir avantajı var mı?

2. Sonuç anahtar sözcüğü argümanı, amacı nedir?

@pyqtSlot(int, result=int) 
def foo(self, arg1): 
    """ C++: int foo(int) """ 

Bu dönüş değerin tipi gibi görünüyor, ama sinyalleri yayan zaman AFAIK sen dönüş değerleri almak mümkün değil.

Bu konuda herhangi bir fikrin var mı?

cevap

6
  1. PyQt mimarisi nedeniyle daha hızlıdır. PyQt, Qt çerçeveyle iletişim kurmak için python yuvalarını C++ yuvalarına dönüştürür. Bir Python yöntemini bir Qt yuvası olarak açıkça işaretlediğinizde ve bunun için bir C++ imzası oluşturduğunuzda, PyQt kodunun zaten belirtildiği gibi C++ imzasının kendisini tahmin etmesi gerekmez. Bu, ağır projelerdeki performansı artırabilir.

  2. Dönüş değeri, yalnızca yuva normal bir işlev olarak çağırmak istediğinizde gereklidir.

Düzenleme: Bu QMetaObject.invokeMethod yöntem, bir yuvayı yürütür ve dönüş değeri var kullanır gibi görünüyor.

+0

Bu mantıklı, teşekkürler! Bu yüzden, dekoratörü kullanmamanın bir avantajı yok, yani >? – Pedru

+0

yoğun olarak kullanılan yuvalarda kullanın. Çok fazla yapmayan ve fazla çağrılmayan temel bir yuva ise, dekoratörde gerek yoktur. Komutu biraz geliştirir, ancak basit işlevlerde fark edilmez. – iTayb

+0

Tamam, her zaman kullanıyorum, çünkü kod okunabilirliğini geliştirdiği için (sözdizimi vurgulama ile) – Pedru

İlgili konular