首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用循环和定时器自动重新加载webView小部件

用循环和定时器自动重新加载webView小部件
EN

Stack Overflow用户
提问于 2019-05-11 09:39:49
回答 1查看 920关注 0票数 0

我正在创建一个GUI,在这里我想用qWebView显示一个站点,并每10秒自动重新加载它。

我试过用qThread,没有结果。(我是一个新的线程),如果我使用一个正常的时间循环,我的窗口冻结。

代码语言:javascript
复制
from PyQt5 import QtCore, QtGui, QtWidgets, QtWebEngineWidgets

class updator(QtCore.QThread):
    def __init__(self, window):
        QtCore.QThread.__init__(self)


    def run(self):
        while True:
            self.sleep(2000 * 2 / 1000)
            self.window.htmlreader_BTCLiveGraph.reload()

class Ui_BTC_LiveGraph(object):
    def setupUi(self, BTC_LiveGraph):
        BTC_LiveGraph.setObjectName("BTC_LiveGraph")
        BTC_LiveGraph.resize(1600, 900)
        BTC_LiveGraph.setAccessibleDescription("")
        self.htmlreader_BTCLiveGraph = QtWebEngineWidgets.QWebEngineView(
            BTC_LiveGraph)
        self.htmlreader_BTCLiveGraph.setGeometry(
            QtCore.QRect(10, 10, 1500, 800))
        self.htmlreader_BTCLiveGraph.setAccessibleDescription("")
        # récupération du chemin absolu du fichier
        self.mypath = os.path.dirname(__file__)
        self.htmlreader_BTCLiveGraph.setUrl(QtCore.QUrl(
            str("file:///" + self.mypath + "/BTC_liveGraph.html")))
        self.htmlreader_BTCLiveGraph.setObjectName("htmlreader_BTCLiveGraph")

        self.retranslateUi(BTC_LiveGraph)
        QtCore.QMetaObject.connectSlotsByName(BTC_LiveGraph)

    def retranslateUi(self, BTC_LiveGraph):
        _translate = QtCore.QCoreApplication.translate
        BTC_LiveGraph.setWindowTitle(
            _translate("BTC_LiveGraph", "BTC Live Graph"))

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    BTC_LiveGraph = QtWidgets.QDialog()
    ui = Ui_BTC_LiveGraph()
    ui.setupUi(BTC_LiveGraph)
    BTC_LiveGraph.show()
    update = updator(ui)
    update.start()
    sys.exit(app.exec_())

我希望qwebviewWidget每10秒重新加载一次,而且窗口没有冻结。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-11 10:25:28

我认为QTimer是解决这个问题的更好方法,下面是一个有用的例子:

代码语言:javascript
复制
import os
import sys
from PyQt5.Qt import QApplication, QMainWindow
from PyQt5.QtCore import QThread, QRect, QUrl, QCoreApplication, QMetaObject, QTimer
from PyQt5.QtWebEngineWidgets import QWebEngineView

class Ui_BTC_LiveGraph(object):
    def setupUi(self, widget):
        widget.setObjectName("BTC_LiveGraph")
        widget.resize(1600, 900)
        widget.setAccessibleDescription("")
        self.htmlreader_BTCLiveGraph = QWebEngineView(widget)
        self.htmlreader_BTCLiveGraph.setGeometry(QRect(10, 10, 1500, 800))
        self.htmlreader_BTCLiveGraph.setAccessibleDescription("")
        self.htmlreader_BTCLiveGraph.setObjectName("htmlreader_BTCLiveGraph")

        self.retranslateUi(widget)
        QMetaObject.connectSlotsByName(widget)

    def retranslateUi(self, widget):
        _translate = QCoreApplication.translate
        widget.setWindowTitle(_translate("BTC_LiveGraph", "BTC Live Graph"))


class MainWindow(Ui_BTC_LiveGraph, QMainWindow):
    def __init__(self):
        super().__init__()

        self.setupUi(self)

        # You can do this here, just keep the Ui class for UI stuff
        self.mypath = os.path.dirname(__file__)
        self.htmlreader_BTCLiveGraph.setUrl(QUrl('http://www.stackoverflow.com'))

        self._updator = QTimer(self)
        self._updator.setSingleShot(False)
        self._updator.timeout.connect(self.reload)
        # Reload every 4 seconds
        self._updator.start(4000)

    def reload(self):
        self.htmlreader_BTCLiveGraph.reload()


if __name__ == "__main__":
    app = QApplication(sys.argv)

    BTC_LiveGraph = MainWindow()
    BTC_LiveGraph.show()

    sys.exit(app.exec_())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56089059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档