我正在创建一个GUI,在这里我想用qWebView显示一个站点,并每10秒自动重新加载它。
我试过用qThread,没有结果。(我是一个新的线程),如果我使用一个正常的时间循环,我的窗口冻结。
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秒重新加载一次,而且窗口没有冻结。
发布于 2019-05-11 10:25:28
我认为QTimer是解决这个问题的更好方法,下面是一个有用的例子:
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_())https://stackoverflow.com/questions/56089059
复制相似问题