У меня есть подкласс 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?