2011-06-16 16 views
8

मुझे पहले से ही एक उत्तर में मिला और संपादित किया गया है।मैं pyqt से जावास्क्रिप्ट को सही तरीके से कैसे वापस कर सकता हूं?

मैं क्यूटीवेबकिट के भीतर पाइथन कोड से जावास्क्रिप्ट संदर्भ में मूल्य वापस करना चाहता हूं।

class Extensions(QtCore.QObject): 
    @QtCore.pyqtSlot() 
    def constant_one(self): 
    return 1; 
# ... later, in code 
e = Extensions(); 
def addextensions(): 
    webview.page().mainFrame().addToJavaScriptWindowObject("extensions", e); 
# ... 
webview.connect(webview.page().mainFrame(), QtCore.SIGNAL("javaScriptWindowObjectCleared"), addextensions) 

मैं बहुत तरह जावास्क्रिप्ट से इस समारोह कॉल कर सकते हैं: अब तक, मैं इस तरह एक वर्ग है

var a = extensions.constant_one(); 

और यह वास्तव में कहा जाता है प्राप्त करता है (मैं वहाँ में एक प्रिंट के साथ सत्यापित); लेकिन अभी भी एक अपरिभाषित समाप्त होता है। फ़ंक्शन से मूल्य वापस क्यों नहीं मिलता है? मैंने एक QVariant में लपेटने की भी कोशिश की, लेकिन अब तक कोई पासा नहीं है।

संपादित करें: मुझे जवाब मिला। जाहिर है, QtWebKit को परिणाम प्रकार को एक संकेत के रूप में चाहिए। एक pyqtSlot-डेकोरेटर करने के लिए है कि प्रदान कर सकते हैं, इस तरह:

class Extensions(QtCore.QObject): 
    @QtCore.pyqtSlot(result="int") 
    def constant_one(self): 
    return 1; 

और फिर इसे सही ढंग से काम करता है। अगर किसी और को कुछ और मिल जाए तो मुझे इसे दो और दिनों तक खोलना चाहिए।

उत्तर

9

प्रश्न पोस्ट करने के तुरंत बाद, मुझे जवाब मिला: जाहिर है, QtWebKit को परिणाम प्रकार को एक संकेत के रूप में चाहिए। कोई इसे pyqtSlot-decorator को प्रदान कर सकता है, इस तरह:

class Extensions(QtCore.QObject): 
    @QtCore.pyqtSlot(result="int") # just int (type object) also works 
    def constant_one(self): 
    return 1; 

और फिर यह सही तरीके से काम करता है।

+0

या स्ट्रिंग उपयोग के लिए '(परिणाम = str)' नहीं '(परिणाम = "str") ' – iman

संबंधित मुद्दे

 संबंधित मुद्दे