【问题标题】:Converting a django app to desktop app using pyqt webkit使用 pyqt webkit 将 django 应用程序转换为桌面应用程序
【发布时间】:2016-06-21 11:55:29
【问题描述】:

我使用 django 创建了一个网络应用程序。但是,我需要一个相同的桌面应用程序,所以我使用了 PyQt 的 webkit。除了文件下载之外,整个事情都很好。在我的网络应用程序中,服务器在几个地方提供可下载的文件。但是,当单击应该在应用程序的桌面版本中触发下载的按钮时,什么也没有发生。

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
app = QApplication(sys.argv)
web = QWebView()
web.load(QUrl("http://localhost:8000/home"))
#web.page().setForwardUnsupportedContent(True)
#web.page().unsupportedContent.connect(save_file_callback)
web.show()
sys.exit(app.exec_())

【问题讨论】:

标签: django pyqt4 qtwebkit


【解决方案1】:
app = QApplication(sys.argv)
web = QWebView(loadFinished=load_finished)
web.load(QUrl("http://localhost:8000/home"))
web.page().setForwardUnsupportedContent(True)
web.page().unsupportedContent.connect(save_file_callback)
web.show()
sys.exit(app.exec_())

def save_file_callback(reply):
    try:
        with urllib.request.urlopen(reply.url().toString()) as response:
            with open('downloaded_file.ext', 'wb') as f:
                f.write(response.read())
            except Exception as e:
                QMessageBox.critical(None, 'Saving Failed!', str(e), QMessageBox.Ok)

def load_finished(reply):
    if not reply:
        QMessageBox.critical(None, 'Error!', 'An error occurred trying to load the page.', QMessageBox.Ok)

我还没有测试过代码,但这应该会让你走上正确的道路。该代码是从我最近的项目中借用的,该项目在 webview 中将 Django 项目作为桌面应用程序运行 - https://github.com/awecode/django-runner

【讨论】:

  • 你能解释一下给 save_file_callback 的参数吗?我收到此错误:TypeError: save_file_callback() 恰好需要 2 个参数(1 个给定) 我的 django 代码是:arg2="pathtofile/result321.py" wrapper = FileWrapper(file(arg2)) response = HttpResponse(wrapper, content_type= 'application/force-download') response['Content-Disposition'] = '附件; filename="result.py"' response['Content-Length'] = os.path.getsize(arg2) 返回响应
  • @Code_aholic 尝试使用更新的代码。就像我说的,我没有测试过,我可能在代码中留下了一两个问题。
  • 谢谢!效果很好....我只需要稍微更改代码即可使用 urllib2 insted 的 urllib。 :)
  • 既然你已经做了这件事,我还需要一个帮助。是否可以在发生错误时阻止我的桌面应用程序进入错误页面,而是在停留在同一页面上时弹出一条消息说“发生错误重试”。 (该错误页面表明它实际上是一个呈现为桌面应用程序的 Web 应用程序)
  • 查看更新后的代码。同样,代码未经测试,您可能必须自己进行修复。
猜你喜欢
  • 2016-12-23
  • 2012-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多