QtWebKit 中的 JavaScript 和异步方法
Posted
技术标签:
【中文标题】QtWebKit 中的 JavaScript 和异步方法【英文标题】:JavaScript and async methods in QtWebKit 【发布时间】:2015-03-30 09:48:33 【问题描述】:我正在开发基于以下内容的桌面软件:
Python:PySide (WebKit) javascript:AngularJS现在,我需要实现异步功能:
从 FTP(Python 部分)上传图片时,我需要在 UI (html+JS) 上显示一些上传器需要关于优雅解决方案的建议。
非常简单的解决方案:
-
在 Python 字典中保存一些标志
通过计时器在JS中请求此标志的值:)
但是,我需要对时间进行硬编码,一旦我进行了长时间的操作,例如从 FTP 下载文件,这对我来说是个问题
解决方案代码:
templateManager.js
function _loadNewTemplates()
var deferred = $.Deferred();
asyncManager.run($.proxy( _loadNewTemplatesCallback, null, deferred ), "get_new_templates_list" );
return deferred;
function _loadNewTemplatesCallback ( deferred, response )
template.newList = response.result;
deferred.resolve();
app_maager.py
@QtCore.Slot(int, result=str)
def get_new_templates_list(self, id):
thread.start_new_thread(get_new_templates_list,
(id,))
utils.py
def get_new_templates_list(id):
config.set_response(id, json.dumps('result': _get_new_templates_list(), 'error': None, MyEncoder))
def _get_new_templates_list():
request = 'category': PRODUCT_CODE
response = requests.post(URL,
data=request,
headers=HEADERS)
return json.loads(response.text)
config.py
def set_response(id, request):
'''
Put pair (id, request) to the internal dictionary
:param id - int, request id:
:param request - string, request string:
:return:
'''
global _async_request
_async_request[id] = request
def get_response(id):
'''
Returns request or empty string if request does not exist
:param id - int
:return - string, request string:
'''
global _async_request
if _async_request.has_key(id):
return _async_request.pop(id)
else:
return ''
【问题讨论】:
问题中没有任何部分表明您尝试编写代码 - 请参阅 ***.com/help/how-to-ask 有什么更新吗?我有兴趣解决同样的问题 【参考方案1】:你可以这样做:
-
使用
stat
/stat.ST_SIZE
检索文件大小,
决定chunk
的大小,
使用正确的范围调用PySide.QtGui.QProgressBar.setRange()
,对于二进制文件,0 到块数(文件大小/ftp 传输块大小)或文本文件的行数。
将回调传递给ftplib.FTP.storbinary()
或ftplib.FTP.storlines()
,以便传输的每个块/行都会相应地增加您的进度条PySide.QtGui.QProgressBar.setValue()
【讨论】:
谢谢。我对没有进展的简单 loader.gif 很好,我正在寻找以异步模式在 JS 和 Python 之间进行通信的最佳灵活解决方案。因为我认为(也许我错了)我上面的方法没有我需要的那么好。以上是关于QtWebKit 中的 JavaScript 和异步方法的主要内容,如果未能解决你的问题,请参考以下文章
使用 QtWebKit 在内存中渲染多个网页会在第二页中断,为啥?
PyQt4.QtWebKit:加载停止时 QWebPage QWebView 设置超时