【发布时间】:2012-08-20 00:59:22
【问题描述】:
我想开发一个跨系统(win、mac、linux)使用的桌面应用程序,是否有一个 GUI 框架可以让我为所有 3 个平台编写一次代码并拥有一个完全可编写脚本的嵌入式 Web 组件?
我需要它有一个 API 来在应用程序和网页 javascript 之间进行通信。
我知道 C#、JavaScript 和一点 python。
【问题讨论】:
标签: c# javascript python tidesdk
我想开发一个跨系统(win、mac、linux)使用的桌面应用程序,是否有一个 GUI 框架可以让我为所有 3 个平台编写一次代码并拥有一个完全可编写脚本的嵌入式 Web 组件?
我需要它有一个 API 来在应用程序和网页 javascript 之间进行通信。
我知道 C#、JavaScript 和一点 python。
【问题讨论】:
标签: c# javascript python tidesdk
还有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
【讨论】:
因为我的第一个答案是针对 wxWidgets,而您觉得 Qt 不适合您...
您提到不是 javascript - 请注意PyQt“为 Qt 2 和 Qt 3 提供 [python] 绑定”。 PySide 是诺基亚为 Qt 提供的官方 Python 绑定。 “PyQt vs PySide”搜索提供了有趣的结果:
还有PythonQt,但我根本没有调查过。
仅供参考,
Qt 提供了一个基于流行的开源浏览器引擎 WebKit 的集成 Web 浏览器组件。
这些示例和演示展示了 WebKit 的一系列不同用途,从在 Qt 用户界面中显示网页到实现基本功能的 Web 浏览器。
Qt 有什么特别之处让你觉得它“不太适合”吗?
【讨论】:
Mono 和 WinForms 有什么问题
【讨论】:
如前所述,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版本,我没测试过但是部署起来很简单
其他嵌入方式 - 尚未测试,看起来不错,但我不知道,可能太没用了
【讨论】:
我要把这个扔掉:
AppJS:http://appjs.org/
【讨论】:
如何使用Chromium Embedded Framework。
它是开源的(BSD 许可),并带有 C、C++、.NET(1 或 2)、Java、Delphi 和 Python 的绑定。
This .NET binding 也与 Mono 完全兼容,这将有助于拥有一个跨平台的应用程序。
【讨论】:
奇怪的是 Qt 不适合你。听到 Sencha 的 Architect 和 Animator 产品将 Qt 和 QWebView 用于具有完整菜单、图标和可执行文件以及系统对话框和文件 I/O 的跨平台 JavaScript 应用程序,您可能会感到惊讶。
它目前适用于 Windows、OSX 和 Linux。
他们使用内部开发的名为 ion 的库来加载和交互 JavaScript 应用程序。它们提供了一些帮助类供 JS 使用。
一个简单的骨架 c++ 应用程序,它使用 Qt 创建和加载一个窗口,并在该窗口中创建一个 Web 视图,并将文件中的 html 和其他内容加载到该视图中。
另一个解决方案是 Adobe 的 Air,它类似于具有本机支持的浏览器。它还提供部署。
【讨论】: