【问题标题】:Cross platform desktop development with HTML5 GUI使用 HTML5 GUI 进行跨平台桌面开发
【发布时间】:2015-05-28 21:18:35
【问题描述】:

简短的故事:有没有办法用 HTML5 的 GUI 和 Python(甚至 C#/Mono)等跨平台语言的核心编写桌面应用程序?

更长的故事:我是一名 C# 开发人员,对于我很少做的小型个人项目,在 Windows 和 OSX 下运行,我使用 C# (Mono) 和利用 Eto.Forms 的前端

我想了解是否有一种成熟的方法可以使用 HTML5 GUI 实现相同的结果,因为我想了解这一点并相信它可能是近期 Windows 桌面 UI(或其他一个很好的工具在我的技能中)。当然,如果在后台运行的代码是 C#,我会非常高兴,但也可以涉足另一个方面,也许像 python 这样的跨平台会更好。

在这个阶段,我对任何面向移动设备的解决方案都不感兴趣。

【问题讨论】:

  • 对于javascript,有nwjs.io :)
  • 为什么不编写一个在浏览器无框架“应用程序模式”下启动的网络应用程序,并使用像 nodejs 这样的本地服务器。 Web 应用模型非常“成熟”。
  • 可以试试bridge.net。它是一个 C# 到 JS 的转译器,因此您可以在 .NET 中编写代码并作为 JS/HTML5 执行。它似乎有一个用于 HTML 操作的 C# API,因此您不必直接处理 HTML。还有 cshtml5.com,除了它是 C# 和 XAML 而不是纯 C# 之外,它是一样的。如果您不一定关心 HTML5,那么最好的选择是 Xamarin(您编写带有或不带有 XAML 的 C#)以实现跨平台性 - 相对稳定,由 MS 支持。您将获得原生 UI。
  • 纯 C# + HTML 解决方案是 Sciter。有一个名为 SciterSharp 的 C# 绑定

标签: c# python html desktop-application


【解决方案1】:

Electron(以前的 Atom shell)最近确实成熟了。事实上,它就是 VSCode 的基础。

有一个 great tutorial 和 starter code 使用 Angular 2 和 Typescript,你甚至可以使用 VSCode 来编写和构建它。

对我来说,这是从 WPF 世界过渡到 HTML5 的最佳方式。

【讨论】:

  • 我已从 TideSDK 更改为已接受的答案,因为 TideSDK 项目已停止
  • 已经有大量基于 Electron 构建的应用程序,链接:electron.atom.io/apps
【解决方案2】:

NW.js 看起来很有前途......您甚至可以使用 TypeScript,它比普通的 ol' js 更接近 C#。如果您愿意使用 PHP,可以查看 nightrain 项目 https://github.com/naetech/nightrain。

【讨论】:

    【解决方案3】:

    试试http://www.tidesdk.org/。

    您的应用将在 Windows 8、MacOS 和 Linux 上运行。您可以使用 HTML5、Javascript 和 CSS3。

    但您也可以使用您熟悉的脚本语言来扩展您的应用程序的功能。 TideSDK 目前支持 Python、PHP 和 Ruby。

    【讨论】:

    • @MrUniverse 不止于此...我做了研究找到另一个链接,发现 TideSDK 已停产,背后的公司已解散。非常坏的消息:stackoverflow.com/a/31369264/585592
    • 自从 TideSDK 停产后,我将此作为已接受的答案删除了
    【解决方案4】:

    我最近使用了Chromium Embedded Framework,它基本上是一个用于 WPF 和 WinForms 的浏览器组件。它工作得很好,并提供了从网站到 .NET 应用程序的双向互操作性,反之亦然。基本上,你:

    1. 创建 WPF 桌面应用程序
    2. 包括 CEFSharp 并在窗口上放置一个全屏浏览器
    3. 在 JavaScript 中调用方法:
    // .NET
    var mainFrame = browser.GetMainFrame();
    mainFrame.ExecuteJavaScriptAsync("any js code");
    
    1. 绑定 .NET 对象
    // .NET
    browser.RegisterJsObject("boundObject", this);
    
    1. 从网站/JS 调用绑定的 .NET 对象上的方法:
    // JS 
    boundObject.someMethod();
    

    在此基础上,您可以在 HTML/JS-UI 和 .NET 逻辑之间构建一个中介层(ViewModel、控制器...)...

    【讨论】:

      【解决方案5】:

      我用http://kivy.org/写了一个APP,它可以为不同的系统创建应用程序。

      Qt 节点https://github.com/arturadib/node-qt 似乎也很有趣,但我自己没有测试。

      最后https://chrome.google.com/webstore/launcher

      您可以为 chrome 创建 Web 应用程序,这些应用程序应在受支持的系统中运行。

      Kivy 是一个 Python 解决方案。 Qt 节点也许正是您要找的。​​p>

      这里有一些很好的 kivy 教程: https://www.youtube.com/playlist?list=PLQVvvaa0QuDe_l6XiJ40yGTEqIKugAdTy

      【讨论】:

        【解决方案6】:

        NW.js

        但它是 Javascript(节点),不是 python 也不是 C#。

        【讨论】:

          【解决方案7】:

          我认为一个非常有趣的项目是Chromium Embedded Framework。您基本上在您的应用程序中嵌入了一个(精简的)Web 浏览器。对于 python,支持许多 GUI 工具包。更多信息请查看this。

          由于您习惯于 C#,也许 Java 与 JavaFX 和 FXML 是一个选项。 FXML 不是 HTML,但您也可以使用 CSS 对其进行样式设置。您还可以使用Scene Builder 来更快地创建 UI。许多 JVM 语言都支持这个工具包,所以 Jython 代替 Java 也可以工作。不过我会推荐 Java,因为它对其他语言的支持还不完善。

          使用 C# 和 Windows App Store WebView 也是一种选择。您可以查看MSDN了解更多信息。

          我确信还有其他选项(Kivy、Node.js 等)。其中一些已在此线程中提及。

          【讨论】:

            【解决方案8】:

            我会推荐基于nodejs的Node-Webkit。你仍然可以使用一些python脚本来做一些与Node-Webkit集成的后端工作,这很容易处理。我已经看到一些成功的应用程序使用这个(像 wunderlist)。TideSDK 是另一种选择,但 TideSDK 中的 python 支持还不够成熟。Node-Webkit 项目托管在 https://github.com/nwjs/nw.js/

            【讨论】:

              猜你喜欢
              • 2010-09-28
              • 1970-01-01
              • 2014-02-18
              • 1970-01-01
              • 2012-02-25
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多