1

我有一个 Web 桌面应用程序,它使用 XPCOM 文件选择器写入和读取本地文件系统,它在 firefox12 中完美运行。然而,后来的 firefox 版本(尤其是当前的 v17)完全禁止使用 xpcom 文件功能。

我想将文件请求传递给本地机器上服务器上的 python tkinter。我可以在 IDLE 和 .py 或 .cgi 文件中打开 tkinter 文件选择器,但是如何让文件对话框重新出现在应用程序的调用 html 页面中?我需要这种交互性而不离开应用程序的页面。任何想法都非常感谢。

4

1 回答 1

0

根据 I/O 的复杂性和频率,您可以将参数发布到 python CGI 脚本并以 JSON 对象的形式返回结果

首先,在 JS 中:

function doIO (data) {
  var request = new XMLHttpRequest(); 
  request.onreadystatechange = function () {
    if (request.readyStatus == 4) {
      if (request.status == 200) { 
        alert('Success!');
        var data = JSON.parse(xmlhttp.responseText);
        // do something with response data
      }
      else { alert('Failure'!); }
    }
  };
  request.open("POST", python_cgi, true);
  request.send(data);
}

在 python 中,您需要实现一个 CGI 脚本来解析数据,找出请求的 I/O 并执行它。您的 python 脚本可能类似于以下内容:

import cgi, json, sys
form = cgi.FieldStorage()
command = form.getFirst('command')
if command == "filePicker":
    # run tkinter file picker
    # build json response object
elif commoand == "myIoCommand":
    # do some I/O
    # build json response object
print "Status: 200"
print "Content-Type: application/json"
json.dump(response, sys.stdout)

如果您需要一些灵感来形成您的 json 响应对象,请参阅例如Google Maps 的 JSON 响应。

如果您需要更频繁/更复杂的 I/O,也许您需要做的是通过更小、更频繁的 AJAX 调用为您的应用程序设置一个具有镜像状态的 Python 服务器。您可以使用框架来制作 RESTful 应用程序,也可以通过从BaseHTTPServer.

于 2013-05-13T03:46:51.253 回答