Как обновить 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_()) 
Другие вопросы по тегам