Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QtWebKit中的JavaScript和异步方法_Javascript_Python_Angularjs_Multithreading_Qt - Fatal编程技术网

QtWebKit中的JavaScript和异步方法

QtWebKit中的JavaScript和异步方法,javascript,python,angularjs,multithreading,qt,Javascript,Python,Angularjs,Multithreading,Qt,我正在基于以下内容开发桌面软件: Python:PySide(WebKit) JavaScript:AngularJS 现在,我需要实现异步功能: 当从FTP(Python部分)上传图像时,我需要在UI(HTML+JS)上显示一些上传程序 需要您对优雅解决方案的建议 非常简单的解决方案: 在Python字典中保存一些标志 计时器在JS中对此标志的请求值:) 然而,我需要硬编码的时间,一旦我有长期的操作,如下载文件从FTP,它的问题为我 解决方案的代码: templateManager.j

我正在基于以下内容开发桌面软件:

  • 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\u mamager.py

        @QtCore.Slot(int, result=str)
        def get_new_templates_list(self, id):
           thread.start_new_thread(get_new_templates_list,
                                        (id,))
    
    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)
    
    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 ''
    
    utils.py

        @QtCore.Slot(int, result=str)
        def get_new_templates_list(self, id):
           thread.start_new_thread(get_new_templates_list,
                                        (id,))
    
    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)
    
    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 ''
    
    config.py

        @QtCore.Slot(int, result=str)
        def get_new_templates_list(self, id):
           thread.start_new_thread(get_new_templates_list,
                                        (id,))
    
    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)
    
    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\u size
    检索文件大小
  • 决定块的大小
  • 使用正确的范围调用,对于二进制文件为0到块数(filesize/ftp传输块大小),对于文本文件为行数
  • 将回调传递给或,以便传输的每个块/行使用
    PySide.QtGui.QProgressBar.setValue()相应地增加进度条

  • 问题中没有任何部分表明您已尝试编写代码-是否看到任何更新?我对解决同样的问题感兴趣。我可以使用simple loader.gif,但没有任何进展,我正在寻找在JS和Python之间以异步模式进行通信的最佳灵活解决方案。因为我认为(也许我错了)我上面的方法没有我需要的那么好。