[英]JavaScript and async methods in QtWebKit
我正在開發桌面軟件基於:
現在,我需要實現異步功能:
需要您對優雅解決方案的建議。
很簡單的解決方案
但是,我需要硬編碼時間,一旦我有長時間的操作,如從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_mamager.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 ''
這是你可以做的:
stat
/ stat.ST_SIZE
檢索文件大小, chunk
大小, PySide.QtGui.QProgressBar.setRange()
,對於二進制文件或文本文件的行數,為0到塊數(filesize / ftp傳輸塊大小)。 ftplib.FTP.storbinary()
或ftplib.FTP.storlines()
以便傳輸的每個塊/行相應地使用PySide.QtGui.QProgressBar.setValue()
相應地增加進度條
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.