【问题标题】:Is there a cross-OS GUI framework that supports embedding HTML pages?是否有支持嵌入 HTML 页面的跨操作系统 GUI 框架?
【发布时间】:2012-08-20 00:59:22
【问题描述】:

我想开发一个跨系统(win、mac、linux)使用的桌面应用程序,是否有一个 GUI 框架可以让我为所有 3 个平台编写一次代码并拥有一个完全可编写脚本的嵌入式 Web 组件?

我需要它有一个 API 来在应用程序和网页 javascript 之间进行通信。

我知道 C#、JavaScript 和一点 python。

【问题讨论】:

    标签: c# javascript python tidesdk


    【解决方案1】:

    QtQWebView有这样的事情。

    【讨论】:

    • 给组件命名不会有什么坏处。
    【解决方案2】:

    wxWidgets 也是。

    PS:Qt 让我更感兴趣的是跨平台 GUI。

    【讨论】:

      【解决方案3】:

      还有TideSDK,正式名称为Titanium。这提供了一个 WebKit HTML/JavaScript 小部件,它几乎可以满足您的所有需求,包括运行 Chrome 开发人员工具。


      编辑。将我的更新与 TideSDK 开发人员的反馈合并:

      TideSDK,前身为 Titanium Desktop,是一个开源软件开发工具包,用于使用 HTML5、CSS3、JavaScript 和其他常用脚本语言创建多平台桌面应用程序。该项目托管在Github。主网站拥有全面的文档并拥有一个活跃的开发者社区。成千上万的开发人员使用以前的 Titanium Desktop 开发桌面应用程序。也许最受认可的应用程序是Wunderlist

      TideSDK 允许您利用您的 Web 开发技能来创建桌面应用程序,并提供范围广泛的特权 API。您可以使用 python、php 或 ruby​​ 中的成熟库轻松扩展应用程序的功能。

      TideSDK 的核心是编译到 WebKit 组件中的对象桥。该桥允许其他脚本语言——python、php 或 ruby​​——使用 DOM 中的脚本标签在 HTML 页面上运行,就像 JavaScript 一样。您还可以在应用程序中直接调用 .py、.rb 或 .php 文件。

      TideSDK 只能与基本的文本编辑器一起使用 - 它不需要任何特殊工具或 IDE,尽管许多开发人员更喜欢更丰富的工具。 TideSDK 包括用于在本地运行您的应用程序(用于开发和调试)的命令行工具,并将其打包到您正在开发的操作系统的安装程序中(支持 Windows、Mac OSX 和 Linux)。为了获得所有需要的安装程序,典型的 TideSDK 开发环境将包括每个操作系统的物理机或虚拟机。 TideSDK 团队正在寻求尽快实施一种不同的更好的方法。

      TideSDK 团队目前正在开发 TideSDK Builder 应用。它将提供一个用于创建、运行和打包 TideSDK 应用程序的 GUI。为了让开发人员更快地开始,TideSDK Builder 引入了一项新功能 - 脚手架。 Scaffolds 生成所有样板以实例化具有特定开发模式的项目,例如 Backbone MVC。开发者可以使用 TideSDK Builder 来创建、导入和共享脚手架。

      TideSDK 的路线图包括 CommonJS for 1.4 的实现,旨在为开发人员使用 JavaScript 提供更加模块化的开发体验。

      你好世界

      TideSDK 项目由一些样板代码和包含核心项目文件的 Resources 文件夹组成。下面展示了一个简单的 hello world 应用程序的结构,该应用程序将在所有支持的平台上运行:

      ├── CHANGELOG.txt
      ├── LICENSE.txt
      ├── README.md
      ├── Resources
      │   ├── app.js
      │   ├── default_app_logo.png
      │   └── index.html
      ├── manifest
      └── tiapp.xml
      

      清单包含有关项目使用的运行时模块的信息。 tiapp.xml 提供配置,default_app_logo.png 是默认出现在 Dock、系统托盘或应用程序窗口中的图像。

      以下是 hello world 示例的 app.js 文件的内容(它将出现在 TideSDK 1.3.0 中)。以前的版本将使用已停用的 Titanium 命名空间。

      // create and set menu
      var menu = Ti.UI.createMenu(),
      fileItem = Ti.UI.createMenuItem('File'),
      exitItem = fileItem.addItem('Exit', function() {
        if (confirm('Are you sure you want to quit?')) {
          Ti.App.exit();
        }
      });
      
      menu.appendItem(fileItem);
      Ti.UI.setMenu(menu);
      

      这是同一应用程序的 HTML。它调用上面的脚本。

      <!DOCTYPE html>
      <html>
      <head>
        <title>Hello World</title>
        <style type="text/css">
          body {background: #fff;}
        </style>
      </head>
      <body>
        <h1>Hello World</h1>
        <script type="text/javascript" src="app.js"></script> 
      </body>
      </html>
      

      在不到 10 行 JavaScript 代码中,我们创建了一个菜单,添加了“文件”和“退出”菜单项,并将其设置到主窗口。一个简单的回调方法用于弹出退出确认对话框。如果用户确认,应用程序将退出。

      背景

      Titanium 由 Appcelerator 开发,并在 Apache 2 许可证下提供。最初 Appcelerator 提供了开源 Titanium Developer 来创建项目。后来 Appcelerator 引入了闭源 Titanium Studio,这是一个基于 Aptana 的 IDE。虽然目前仍然可以在 Titanium Studio 中开发 TideSDK,但将来可能需要一个插件。 [安德鲁:对不起,我不清楚。 Titanium Studio 的插件?还是阿普塔纳?还是 TideSDK?]

      Appcelerator 提供了一个 TiStudio SDK 来使用,它可以帮助我们为 TiStudio 创建一个插件,以允许通过 TiStudio 使用 TideSDK

      【讨论】:

      • 我保证,TideSDK 是一个完整的解决方案,能够开发桌面应用程序,而不会因学习 Objective C 和 C 等而陷入痛苦的混乱......
      • 我听说过钛,但是看起来他们进步很大,看起来很有希望,我去试试,谢谢
      • 这看起来很棒。你到底是怎么编译的??我找不到关于如何将其从目录结构获取到应用程序的任何信息。
      • @preahkumpii:TideSDK 包含一个名为 tibuild.py 的构建/打包脚本。在 Mac 上,它位于(不在)~/Library/Application Support/Titanium/sdk 下。对于 Windows,请参阅 developer.appcelerator.com/question/73271/…。运行此脚本(无参数为您提供命令行参数和帮助)。我的命令行是:tibuild.py -r -d build appname
      • @AndrewAlcock 哇,感谢您的解释。目前我正在使用 Ti Dev Community 并取得了一些成功。我很期待他们何时获得 TideSDK 编译器的 GUI 版本。
      【解决方案4】:

      因为我的第一个答案是针对 wxWidgets,而您觉得 Qt 不适合您...
      您提到不是 javascript - 请注意PyQt为 Qt 2 和 Qt 3 提供 [python] 绑定”。 PySide 是诺基亚为 Qt 提供的官方 Python 绑定。 “PyQt vs PySide”搜索提供了有趣的结果:

      还有PythonQt,但我根本没有调查过。

      仅供参考,

      • Qt Networking examples
      • Qt WebKit examples:

        Qt 提供了一个基于流行的开源浏览器引擎 WebKit 的集成 Web 浏览器组件。

        这些示例和演示展示了 WebKit 的一系列不同用途,从在 Qt 用户界面中显示网页到实现基本功能的 Web 浏览器。

      • Qt 也支持 C#
      • many other languages
      • KDE(Linux桌面环境)使用和开发Qt

      Qt 有什么特别之处让你觉得它“不太适合”吗?

      【讨论】:

      • 我浏览了 Qt 站点,似乎你可以用 C++ 做任何事情,用 JavaScript 做一些事情。我根本不懂C++。我还看到了 Qyoto(支持 C#),但也读到它不再受支持。我会进一步研究 PyQt。
      【解决方案5】:

      Mono 和 WinForms 有什么问题

      【讨论】:

      • @AlexanderN 当你知道 c# 和 JS 使用熟悉的东西而不是完全不同的框架和语言时,这很有意义,不是吗?
      • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
      • @MartijnPieters 所以你想用“Go for”改变“What's wrong with”这个词,它会没事的。你对答案的定义是哪里出了问题——我既不是批评也不是要求澄清——我给作者的正是他所需要的。
      【解决方案6】:

      如前所述,TideSDK (http://www.tidesdk.org/) 是一种选择(目前对我来说更好) 您也可以采用相同的想法 XUL Runner (https://developer.mozilla.org/en-US/docs/XULRunner)、Adobe AIR (http://www.adobe.com/devnet/air/air-sdk-download.html)(这里:http://www.adobe.com/devnet/air.html 是除了 flash 和 dreamweaver、AppJS(@987654325)以外的“如何”的教程@) 或节点 Qt (https://github.com/arturadib/node-qt) 还有更多的工作有 cef (http://code.google.com/p/chromiumembedded/)、berkelium (http://berkelium.org/)、awesomium (http://awesomium.com) 或 How can I embed firefox in a GUI application?,它说明了如何在应用程序中嵌入 gecko(firefox 的引擎)。

      好的,现在我对所有的看法:第一个选项将为您提供更好的方法,因为它们基本上是一个跨平台工作的“浏览器”,您将部署一个 html + js + css 应用程序(与空气你也可以部署 Flash/动作脚本应用程序);您必须构建应用程序然后将“浏览器”放入其中的其他选项,它提供了更大的灵活性,但可能会适得其反。

      我的经验是: 潮汐dk - 良好且稳定但仍在增长,因此可能会遗漏一些高级功能,但您可以编译它并且开发团队非常活跃

      xulrunner - 稳定,不可能做复杂的事情,你需要良好的 C 知识来制作你自己的组件,因为它只为你提供基本的东西。你可以做的事情非常灵活,但是内容结构很僵化,除非以这种方式组织,否则你的应用程序将无法运行,并且在我看来语法丑陋(哈哈),它是 java 和 javascript 风格的混合编程之道

      adobe air - 易于使用和部署,但它是 flash,它给我未优化的东西那种奇怪的瘙痒感

      appjs - 是 nodejs,示例有效,我无法运行我的自定义应用程序,我认为它还没有完善,对我来说,它以一种古怪的方式工作

      nodeqt - 是qt + nodejs,需要自己编译qt版本,我没测试过但是部署起来很简单

      其他嵌入方式 - 尚未测试,看起来不错,但我不知道,可能太没用了

      【讨论】:

        【解决方案7】:

        我要把这个扔掉:

        AppJS:http://appjs.org/

        【讨论】:

          【解决方案8】:

          如何使用Chromium Embedded Framework

          它是开源的(BSD 许可),并带有 C、C++、.NET(12)、Java、Delphi 和 Python 的绑定。

          This .NET binding 也与 Mono 完全兼容,这将有助于拥有一个跨平台的应用程序。

          注意:AppJS(在另一个答案中提到)建立在 CEF 之上(使用 node.js)。

          【讨论】:

            【解决方案9】:
            1. 奇怪的是 Qt 不适合你。听到 Sencha 的 Architect 和 Animator 产品将 Qt 和 QWebView 用于具有完整菜单、图标和可执行文件以及系统对话框和文件 I/O 的跨平台 JavaScript 应用程序,您可能会感到惊讶。

              它目前适用于 Windows、OSX 和 Linux。

              他们使用内部开发的名为 ion 的库来加载和交互 JavaScript 应用程序。它们提供了一些帮助类供 JS 使用。

              一个简单的骨架 c++ 应用程序,它使用 Qt 创建和加载一个窗口,并在该窗口中创建一个 Web 视图,并将文件中的 html 和其他内容加载到该视图中。

            2. 另一个解决方案是 Adob​​e 的 Air,它类似于具有本机支持的浏览器。它还提供部署。

            【讨论】:

            • 我不喜欢在我的项目中使用我无法使用的代码,我在 Qt 中阅读过有关 javascript 的内容,但它似乎无法完成 C++ 所能做的所有事情(我不'不知道 C++),如果一切都可能只用 javascript - 我没有问题
            • “我不喜欢我的项目中有我无法使用的代码”。处理它,因为您使用浏览器、JS 运行时、操作系统和许多其他组件。试试 Adob​​e AIR,它是作为浏览器的运行时环境。所有的JS。提供原生支持。支持 Windows、Linux、Mac、Android、iOS,甚至黑莓 PlayBook
            猜你喜欢
            • 1970-01-01
            • 2015-10-25
            • 1970-01-01
            • 2020-06-21
            • 2018-03-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多