QEventL oop в QWebEnginePage.javaScriptConfirm полностью пропущен - PullRequest
0 голосов
/ 20 июня 2020

У меня есть подкласс QWebEnginePage, в котором я хотел бы переопределить функцию javaSrciptConfirm, чтобы создать собственное всплывающее окно. Он будет работать, запустив QEventLoop и подключив сигналы QPushButton.clicked.connect от кнопок OK и Cancel во всплывающем окне к слоту QEventLoop.quit.

Я не мог заставить это работать, как оказалось что QEventLoop был сразу полностью обойден. Поэтому я попробовал использовать только желтую кнопку, которая отображается в верхнем левом углу, и при ее нажатии она должна выйти из QEventLoop, а затем стать красной, что по-прежнему не работает:

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import *
import sys

class MainWindow(QMainWindow):
  def __init__(self,parent=None,*args,**kwargs):
    QMainWindow.__init__(self,parent,*args,**kwargs)

    self._webEngine = QWebEngineView(self)
    self._webEngine.setPage(MyWebEnginePage(self._webEngine))
    self._webEngine.setUrl(QUrl("https://www.seleniumeasy.com/test/javascript-alert-box-demo.html"))

    self.setCentralWidget(self._webEngine)

    self.showMaximized()

class MyWebEnginePage(QWebEnginePage):
  def __init__(self,parent,*args,**kwargs):
    QWebEnginePage.__init__(self,parent,*args,**kwargs)

  def javaScriptConfirm(self,url,msg):
    print("in here")
    button = QPushButton(self.parent().window())
    button.setStyleSheet("background-color: yellow")
    button.show()

    loop = QEventLoop(self.parent().window())
    button.clicked.connect(loop.quit)
    loop.exec_()

    button.setStyleSheet("background-color: red")

def myExceptHook(e,v,t):
  sys.__excepthook__(e,v,t)

if __name__ == "__main__":
  sys.excepthook = myExceptHook
  app = QApplication(sys.argv)
  window = MainWindow()
  app.quit()

Когда программа запускается, она переходит к https://www.seleniumeasy.com/test/javascript-alert-box-demo.html, и я нажимаю кнопку, которая вызывает окно подтверждения JS (вторая кнопка вниз). В углу экрана отображается красная кнопка. Он должен быть желтым и становиться красным только после того, как я щелкаю по нему, но QEventLoop никогда не зацикливается, он немедленно выходит из него. Когда я могу заставить кнопку оставаться желтой до щелчка, я могу удалить ее и подключить всплывающие кнопки к слоту QEventLoop.quit.

Я попытался сделать переменную loop a self.loop, другим родительские объекты для QEventLoop, что делает button a self.button, я не уверен, почему l oop сразу закрывается. Что мне нужно изменить, чтобы QEventLoop на самом деле l oop?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...