【问题标题】:Flask based desktop app, bundled with Chromium embedded framework client基于 Flask 的桌面应用程序,与 Chromium 嵌入式框架客户端捆绑在一起
【发布时间】:2014-06-23 19:47:47
【问题描述】:

我正在尝试开发一个跨平台、基于 Flask 的桌面应用程序(作为本地服务器),与 Chromium 嵌入式浏览器简单窗口(作为客户端)捆绑在一起。 CEF 客户端是为 Windows 和 Mac 分别实现的,虽然这不是完全跨平台的,但实际上不需要在客户端,仅使用 CEF 简单示例中已提供的最少功能。

是否有将两者(客户端和服务器)打包在一起的最佳做法?在开发环境中,一切都按预期工作。启动客户端和服务器由单独的 Python 脚本控制,但我想知道是否有更好的解决方案来执行此操作(例如,在客户端使用一些方法来检查服务器是否正在运行,如果它不是...)。我也想知道这是否是开发跨平台桌面应用程序的好方法。也许有一种更好的方法可以将基于 HTML 的桌面应用程序打包到具有原生外观的窗口中?

【问题讨论】:

    标签: python flask cross-platform desktop-application chromium-embedded


    【解决方案1】:

    我没有关于 CEF 的答案,但我查看了两种将基于 HTML 的桌面应用程序打包到本机外观窗口中的解决方案:

    • PySide
    • Node-Webkit

    在 Flask 中使用 PySide 非常简单,只需在 Flask app.py 文件附近添加以下脚本即可直接运行:

    import os, urllib, sys, time, json
    
    # import PySide
    from PySide.QtGui import *
    from PySide.QtWebKit import *
    from PySide.QtCore import *
    
    # import Flask
    from app import app as application
    
    class WebApp(QThread):
        def setApplication(self, app, setup_callback):
            self.application = app
            self.setup_callback = setup_callback
    
        def run(self):
            self.setup_callback()
            self.application.run(use_debugger=True, debug=True, use_reloader=False, port=5000)
    
    def main():
        global web, env
    
        # Init Flask server
        webappThread = WebApp()
        def setup_callback():
            print 'Do something specific here before app start'
        webappThread.setApplication(application, setup_callback)
        webappThread.start()
    
        # Init QT app
        app = QApplication(sys.argv)
    
        # Setup WebView (WebKit)
        web = QWebView()
        web.resize(992, 800)
        web.setWindowTitle('Application Name')
        # web.setWindowIcon(QIcon('static/img/icon.png'))
        qr = web.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        web.move(qr.topLeft())  
    
        web.setUrl('http://127.0.0.1:5000/')
    
        # Bind shut down
        def shutdown():
            webappThread.quit()
        app.aboutToQuit.connect(shutdown)
    
        # Start up
        web.show()
        sys.exit(app.exec_())
    
    if __name__ == '__main__':
        main()
    

    它会打开一个窗口,其中使用 Webkit 显示您的 HTML。我发现的问题是结果看起来不如现代网络浏览器好,这意味着结果像素化且速度慢。但是,如果这对您来说看起来不错,那么您有一个解决方案;)

    我现在正在尝试看看是否可以让 python 与 node-webkit 进行通信,这看起来很有希望。我已经问了一个问题here re this 但我没有得到任何答案。如果您有兴趣,请查看this example。我不能让它工作,但它肯定看起来很有希望。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 2010-11-18
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多