- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用evaluateJavaScript命令动态修改我的GUI
我注意到只有当 python 完成工作时 GUI 才会更新。我创建了这个示例代码:
基本 GUI:
webView = QWebView()
myObj = ExampleClass(webView)
webView.page().mainFrame().addToJavaScriptWindowObject("pyObj", myObj)
webView.setHtml('''
<html>
<body>
<div id="content"></div>
<button onClick="pyObj.example()">start</button>
</body>
</html>
''')
用于更新 Html GUI 的 Python 代码:
class ExampleClass(QtCore.QObject):
def __init__(self, webView):
super(ExampleClass, self).__init__(webView)
self.webView = webView
@QtCore.pyqtSlot()
def example(self):
print("start")
for i in range(0,5):
print(i)
self.webView.page().mainFrame().evaluateJavaScript('document.getElementById("content").innerHTML = "'+str(i)+'";')
time.sleep(1)
#simulation of a heavy code
for a in range(0,999):
for b in range(0,9999):
c = a * b;
目标:按下“开始”按钮后,我希望看到数字 0 1 2 3 4 按顺序出现在我的 GUI 中。当前结果:按“开始”按钮N秒后没有任何反应,然后出现数字4
最佳答案
如@gelonida指出,一般的解决方案是使用线程并通过信号通知GUI,所以我的回答提供了一个可能的实现。
要在线程中实现,必须在顺序任务中重新排列 for 循环,例如使用迭代器,然后在任务完成时通过信号调用下一个循环。对于本例中的耗时任务,我创建了一个位于另一个线程中的工作人员,并且必须调用“任务”方法。
import sys
from PyQt5 import QtCore, QtWidgets, QtWebKitWidgets
class Worker(QtCore.QObject):
finished = QtCore.pyqtSignal()
@QtCore.pyqtSlot()
def task(self):
# simulation of a heavy code
for a in range(999):
for b in range(9999):
c = a * b
self.finished.emit()
class ExampleClass(QtCore.QObject):
def __init__(self, webView):
super(ExampleClass, self).__init__(webView)
self.webView = webView
thread = QtCore.QThread(self)
thread.start()
self.m_worker = Worker()
self.m_worker.moveToThread(thread)
self.m_worker.finished.connect(self.execute)
self.m_numbers = None
@QtCore.pyqtSlot()
def example(self):
print("example")
self.m_numbers = iter(range(5))
self.execute()
@QtCore.pyqtSlot()
def execute(self):
if self.m_numbers is None:
return
try:
i = next(self.m_numbers)
except StopIteration:
return
else:
self.webView.page().mainFrame().evaluateJavaScript(
'document.getElementById("content").innerHTML = "{}";'.format(i)
)
QtCore.QTimer.singleShot(1000, self.m_worker.task)
if __name__ == "__main__":
html = """<html>
<body>
<div id="content"></div>
<button onClick="pyObj.example()">start</button>
</body>
</html>"""
app = QtWidgets.QApplication(sys.argv)
view = QtWebKitWidgets.QWebView()
obj = ExampleClass(view)
view.page().mainFrame().addToJavaScriptWindowObject("pyObj", obj)
view.setHtml(html)
view.resize(640, 480)
view.show()
sys.exit(app.exec_())
关于python - PyQt5 如果Python仍在运行,如何在使用evaluateJavaScript时更新GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58447100/
我在这个项目中使用 swift 4。我正在尝试使用 EvaluateJavascript() 函数在 WKWebView 中运行的网页上运行 javascript。我正在尝试一个简单的警报功能来启动以
我尝试在我的主线程中使用 evaluateJavascript 方法,它工作正常。但是如果我将函数移动到我的另一个线程(我有一个服务在后台运行等待消息)。它根本不起作用。所以我假设 evaluateJ
我有以下代码: HTML + JavaScript .color1{ color: #3D8BD0; } Mensage $("#mensagem").click(function(
如何在运行时执行 javascript 函数,加载聊天窗口的函数不会执行 func webView(_ webView: WKWebView, didFinish navigation: WKNavi
我正在尝试使用新的 evaluateJavascript Android 4.4 中的方法,但我得到的只是一个空结果: webView1.evaluateJavascript("return \"te
我正在向 javascript 函数发送一个值并得到一个结果。但是,当运行以下代码时,我收到“错误域 = WKErrorDomain 代码 = 5“JavaScript 执行返回了不受支持的类型的结果
我正在尝试通过在 kitkat 之后为 android 版本调用 evaluateJavaScript() 方法并使用 loadUrl("javascript:"+javascript ); 在 ki
我有一个 UIViewController,它有一个 WKWebView,它加载一个特定的 View ,其中有一个需要自动点击的按钮。为了解决这个问题,我使用了 WKNavigationDelegat
for (int i = 0; i page ()->mainFrame ()->evaluateJavaScript (QString ("constructFileName (%1).arg (c
为 Android webView 编写了一些渲染器。尝试像这样调用一些 javascript: if (Build.VERSION.SdkInt >= BuildVersionCodes.Kitka
我正在尝试使用 WKWebView.EvaluateJavaScript(string, WKJavascriptEvaluationResult) 从我的 javascript 代码中获取一个值返回
我是 Swift 开发的新手,我有一个正在开发的混合应用程序,我已经连接了身份验证。当用户使用设备上的指纹传感器进行身份验证时,我想触发 JS 或以其他方式与 WKWebView 交互......但出
我几周来一直在尝试解决这个问题,但不知道是什么导致了这个问题。在我的项目中,我使用 Android Webview 的 evaluateJavascript() 方法,如下所示: this.r
我有一个字符串化的 JSON 对象,我想将其作为字符串传递到我的 WebView 中。如果我的 JSON 字符串是像这样的简单的一级 JSON: JSONObject object = new JSO
我对从 evaluateJavascript 和 getElementById 返回的字符串有问题,其中返回的字符串使用斜线和引号格式化。 例如,我的 webview 中有一个元素,其 Id 为 us
我正在开发 Expo 的 React Native 应用程序。我将项目弹出到 ExpoKit 并添加了 react-native-wkwebview-reborn。我遇到了这个库的一些问题,因为总是出
目标是在包含在 WKWebView 中的网页中调用回调函数。 evaluateJavaScript 在其参数包含换行符时中断,这意味着永远不会调用回调函数。 这是为什么? userContentCon
我正在使用 WKWebView加载 html 页面并使用 evaluateJavaScript 执行 javascript 函数。 这是我的做法。 使用大量对 javascript 和 CSS 文件的
我正在尝试获取 WebView 的实例,以便我可以对其调用 evaluateJavascript()。我编写了一个自定义匹配器,然后尝试将 WebView 分配给静态变量,如下所示: public
我有一个在以下环境中工作的应用程序: 单点触控 2.1 MonoDevelop 2.4.2 MacOS 10.6.8 iOS SDK 4.3 同一个应用程序,迁移到 iOS 5.0/5.1 和 Mon
我是一名优秀的程序员,十分优秀!