Как обновить QApplication, используя каждый QWebEngineView с периодом расписания - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь перезагрузить 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 Ответ

0 голосов
/ 28 ноября 2018

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