Как обновить QApplication, используя каждый QWebEngineView с периодом расписания
Я пытаюсь перезагрузить URL в заданный период, используя PYQT5, QWebEngineView и график, так как я ищу, что код останавливает выполнение после app_exec(). Таким образом, цикл "while" и "планировщик" никогда не выполняются.
Насколько у меня есть поиск, есть разные способы перезагрузить страницу (перезагрузить, обновить, перекрасить), но я не могу найти способ выполнить это во время выполнения веб-страницы.
любая идея?
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl
from PyQt5.QtWebEngineWidgets import QWebEngineView
import schedule, time
def job():
print('test')
print('Reload :%s',time.time())
browser.reload()
browser.refresh()
browser.sender().reload()
browser.repaint()
url ='http://www.google.com'
app = QApplication(sys.argv)
browser = QWebEngineView()
browser.load(QUrl(url))
browser.showFullScreen()
schedule.every(0.5).minutes.do(job)
sys.exit(app.exec_())
while True:
schedule.run_pending()
time.sleep(1)
1 ответ
app.exec_()
это цикл событий, который позволяет GUI выполнять свои задачи, такие как прослушивание событий и обновление состояний GUI, цикл событий похож на while True: doSomething()
Таким образом, код, который следует за ним, будет выполняться только после завершения работы графического интерфейса. С другой стороны, если вы хотите выполнять периодические задачи, вы должны использовать QTimer
:
import sys
import time
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets
def job():
print('test')
print('Reload :%s',time.time())
browser.reload()
if __name__ == '__main__':
url ='http://www.google.com'
app = QtWidgets.QApplication(sys.argv)
browser = QtWebEngineWidgets.QWebEngineView()
browser.load(QtCore.QUrl(url))
browser.show()
timer = QtCore.QTimer(interval=30*1000)
timer.timeout.connect(job)
timer.start()
sys.exit(app.exec_())