簡體   English   中英

QtWebKit中的JavaScript和異步方法

[英]JavaScript and async methods in QtWebKit

我正在開發桌面軟件基於:

  • Python:PySide(WebKit)
  • JavaScript:AngularJS

現在,我需要實現異步功能:

  • 從FTP(Python部分)上傳圖像時,我需要在UI上顯示一些上傳器(HTML + JS)

需要您對優雅解決方案的建議。

很簡單的解決方案

  1. 在Python字典中保存一些標志
  2. 通過計時器在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_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 ''

這是你可以做的:

  1. 使用stat / stat.ST_SIZE檢索文件大小,
  2. 決定chunk大小,
  3. 使用正確的范圍調用PySide.QtGui.QProgressBar.setRange() ,對於二進制文件或文本文件的行數,為0到塊數(filesize / ftp傳輸塊大小)。
  4. 將回調傳遞給ftplib.FTP.storbinary()ftplib.FTP.storlines()以便傳輸的每個塊/行相應地使用PySide.QtGui.QProgressBar.setValue()相應地增加進度條

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM