2016-04-22 1 views
-1

Je construis une application de bureau en utilisant PyQt python qui a un QwebBrowser. maintenant je cours une certaine fonction en utilisant javascript qui renvoie une valeur disent abc selon l'exemple suivant.Valeur de retour de l'emplacement PYQt de QwebView au widget de la fenêtre principale (PYQt python)

class QWebView(QWebView): 

def contextMenuEvent(self,event): 
     menu = QMenu() 
     self.actionShowXpath = menu.addAction("Show Xpath") 
     QObject.connect(self.actionShowXpath,SIGNAL("triggered()"),self,SLOT("slotshowxpath()")) 

     menu.exec_(self.mapToGlobal(QPoint(event.x(),event.y()))) 

     @pyqtSlot() 
     def slotshowxpath(self): 
      frame.evaluateJavaScript("var abc = function get()"); 
      result = frame.evaluateJavaScript("abc").toString() 

      **some code code to put result in QLineEdit Widget** 
      # something like below 
      # xpath.setText(result) 


def window(): 
    app = QtGui.QApplication(sys.argv) 
    w = QtGui.QWidget() 
    web = QWebView(w) 
    web.load(QUrl("http://www.indiatimes.com/")) 
    web.show() 

    xpath = QtGui.QLineEdit("", w) 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    window() 

maintenant, je veux mettre la valeur abc dans un widget QLineEdit (« XPath ») présent dans mon application.please me donner suggestion comment je peux-je faire cela?

+0

Jetez un oeil à cet article: [PySide. JavaScript. Exécutez js et obtenez le résultat sous forme de texte pur ou html] (http://stackoverflow.com/a/20047805/2473979) – salomonderossi

+1

Ce n'est pas comme ça que vous appelez une fonction dans js. – 7stud

+0

@salomonderossi merci pour la référence, mais je veux savoir comment mettre la valeur de résultat dans le widget QLineEdit qui est présent dans un autre def. –

Répondre

1

Je ne peux pas donner d'exemple parce que QtWebkit a été retiré de Qt 5.6, mais si le problème que vous avez est parce que vous n'avez pas de référence à votre QLineEdit, passez le QLineEdit à votre classe QWebView's __init__() fonction:

def start_app(): 
    app = QtGui.QApplication(sys.argv) 

    main_window = QtGui.QWidget() 
    xpathInput = QtGui.QLineEdit(main_window) 

    web_view = MyWebView(main_window, xpathInput) #<===HERE 
    web_view.load(QUrl("http://www.indiatimes.com/")) 

    main_window.show() 
    sys.exit(app.exec_()) 

Ensuite, dans votre classe QWebView:

class MyWebView(QWebView): 
    def __init__(self, parent, xpath_widget): 
     #QWebView.__init__(parent) 
     QWebView.__init__(self, parent) 
     #or: super(MyWebView, self).__init__(parent) 

     self.xpath_widget = xpath_widget 

    def contextMenuEvent(self,event): 
     menu = QMenu() 
     self.actionShowXpath = menu.addAction("Show Xpath") 

     #QObject.connect(
     # self.actionShowXpath, 
     # SIGNAL("triggered()"), 
     # self,SLOT("slotshowxpath()") 
     #) 

     self.actionShowXpath.triggered.connect(self.show_xpath) 

     menu.exec_(self.mapToGlobal(QPoint(event.x(),event.y()))) 

    #@pyqtSlot() 
    def show_xpath(self): 
     frame = ... 
     frame.evaluateJavaScript("var abc = function get()"); 
     result = frame.evaluateJavaScript("abc").toString() 

     #some code code to put result in QLineEdit Widget** 
     self.xpath_widget.setText(result) 

Mais je pense une meilleure façon d'organiser votre code serait de faire quelque chose comme ceci:

class MyWindow(QMainWindow): 
    def __init__(self): 
     super(MyWindow, self).__init__() 

     self.xpathInput = QtGui.QLineEdit(self) 

     self.web_view = QWebView(self) 
     self.web_view.load(QUrl("http://www.indiatimes.com/")) 

     self.menu = QMenu() 
     self.actionShowXpath = self.menu.addAction("Show Xpath") 

     #QObject.connect(
     # self.actionShowXpath, 
     # SIGNAL("triggered()"), 
     # self,SLOT("slotshowxpath()") 
     #) 

     self.actionShowXpath.triggered.connect(self.show_xpath) 

     menu.exec_(self.mapToGlobal(QPoint(event.x(),event.y()))) 

    def show_path(self): 
     frame = ... 
     result = frame.evaluateJavaScript("abc").toString() 
     self.xpathInput.setText(result) 


def start_app(): 
    app = QtGui.QApplication(sys.argv) 
    main_window = MyWindow() 
    main_window.show() 
    sys.exit(app.exec_()) 
+0

merci pour l'aide mon pote, je vais essayer ceci et vous mettre à jour dans quelques heures –

+0

son en me montrant une erreur-Traceback (dernier appel dernier): Fichier "GUI-Test.py", ligne 91, dans fenêtre() Fichier "GUI-Test.py", ligne 75, dans la fenêtre web = QWebView (w, xpath) TypeError: __init __() prend exactement 2 arguments (3 donnés) –

+0

@ricky rana, la programmation GUI est un intermédiaire à un sujet avancé en programmation informatique. Il est clair que vous êtes un débutant python. Vous n'êtes pas encore prêt pour les programmes PyQt. Néanmoins, voir le changement que j'ai fait. – 7stud