2016-04-22 6 views
-1

Я создаю настольное приложение с использованием PyQt python с QwebBrowser. теперь я запускаю некоторую функцию, используя javascript, который возвращает значение say abc в соответствии с приведенным ниже примером.Возвращаемое значение из PYQt слота QwebView в виджет главного окна (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() 

сейчас, я хочу поставить значение аЬса в виджете (QLineEdit «)» XPath присутствующего в моем application.please дать мне предложение о том, как я могу я это сделать?

+0

Взгляните на это сообщение: [PySide. JavaScript. Выполнить js получить результат как чистый текст или html] (http://stackoverflow.com/a/20047805/2473979) – salomonderossi

+1

Это не то, как вы называете функцию в js. – 7stud

+0

@salomonderossi спасибо за ссылку, но я хочу знать, как поместить значение результата в виджет QLineEdit, который присутствует в другом def. –

ответ

1

Я не могу придумать пример, потому что QtWebkit был удален из Qt 5.6, но если проблема связана с тем, что у вас нет ссылки на ваш QLineEdit, то передайте QLineEdit в класс Q44View для QWebView __init__() функция:

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_()) 

Тогда в классе 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) 

Но я думаю, что лучший способ организовать ваш код будет делать что-то вроде этого:

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

спасибо за помощь приятель, я попробую это и обновит вас через несколько часов –

+0

его покажет мне ошибку. Traceback (последний последний звонок): Файл «GUI-Test.py», строка 91, в () Файл «GUI-Test.py», строка 75, в окне web = QWebView (w, xpath) ТипError: __init __() принимает ровно 2 аргумента (3 данных) –

+0

@ ricky rana, программирование графического интерфейса является промежуточным к передовой теме в компьютерном программировании. Понятно, что вы начинающий питон. Вы еще не готовы к программам PyQt. Тем не менее, см. Изменение, которое я сделал. – 7stud