gpt4 book ai didi

javascript - evaluateJavaScript() 只工作一次

转载 作者:行者123 更新时间:2023-11-28 19:22:54 24 4
gpt4 key购买 nike

我有以下代码:
HTML + JavaScript

<style type="text/css">
.color1{
color: #3D8BD0;
}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<body>
<div id="mensagem">Mensage</div>
<script>
$("#mensagem").click(function( event ) {
printer.text('Hello');
});
</script>
</body>

还有 .py 文件:

# -*- coding:utf-8 -*-
import sys
from PySide.QtCore import Slot, QObject, QUrl
from PySide.QtGui import QApplication
from PySide.QtWebKit import QWebView
from threading import Timer

class Dac(QObject):
def __init__(self, parent=None):
super(Dac, self).__init__(parent)
self.defultMsg = "default"
self.app = QApplication(sys.argv)
self.view = QWebView()
self.view.resize(445, 791)
self.view.load(QUrl("./page.html"))
self.frame = self.view.page().mainFrame()
self.frame.addToJavaScriptWindowObject('printer', self)
self.view.show()
self.app.exec_()
sys.exit(self.app.exec_())

def changeText(self, mensagem):
print mensagem
self.frame.evaluateJavaScript(mensagem)

@Slot(str)
def text(self, message):
print message
strm = '$("#mensagem").html("'+message+'").addClass("color1");'
self.changeText(strm) #this change the text
t = Timer(6.5, self.timeoff)
t.start()

def timeoff(self):
strm = '$("#mensagem").html("'+self.defultMsg+'").removeClass("color1");'
self.changeText(strm) #this don't change
print "debug"

dac = Dac()

当我运行 Python 文件时,窗口会打开并显示 HTML 页面,然后当我单击 div“mensagem”时,文本只会更改一次。
所以我认为我的问题是声明 self.frame.evaluateJavaScript(mensagem) 只适用于第一次。

有没有人遇到同样的问题?

最佳答案

您提供给threading.Timer 的回调不会被主线程执行。由于 QWebView 继承自 QWidget,因此您必须与其交互 from the main thread :

Although QObject is reentrant, the GUI classes, notably QWidget and all its subclasses, are not reentrant. They can only be used from the main thread.

您可以通过使用 PySide.QtCore.QTimer 并替换此代码来解决此问题:

t = Timer(6.5, self.timeoff)
t.start()

与:

QTimer.singleShot(6.5 * 1000, self.timeoff)

QTimer 与 Qt 的事件循环一起工作,因此保持在同一个线程中。

关于javascript - evaluateJavaScript() 只工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20549164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com