使用HTML5 GUI进行跨平台桌面开发

时间:2015-03-25 09:19:50

标签: c# python html5 desktop-application

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

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

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

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

8 个答案:

答案 0 :(得分:6)

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

vscode

使用Angular 2和Typescript有great tutorialstarter code,您甚至可以使用VSCode编写和构建它。

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

答案 1 :(得分:3)

NW.js看起来非常有前途......你甚至可以使用TypeScript,它比普通的OL更接近C#。 JS。如果您打开使用PHP,可以查看夜间项目https://github.com/naetech/nightrain

答案 2 :(得分:3)

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

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

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

答案 3 :(得分:0)

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

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

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

您可以为Chrome创建网络应用,该应用应在受支持的系统中运行。

Kivy是一个Python解决方案。 Qt节点可能就是你要找的东西。

以下是kivy的一些很好的教程: https://www.youtube.com/playlist?list=PLQVvvaa0QuDe_l6XiJ40yGTEqIKugAdTy

答案 4 :(得分:0)

NW.js

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

答案 5 :(得分:0)

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

由于您习惯使用C#,因此可能选择带有JavaFX和FXML的Java。 FXML不是HTML,但您也可以使用CSS设置样式。您还可以使用Scene Builder来更快地创建UI。许多JVM语言都支持此工具包,因此Jython而不是Java也可以使用。我会推荐Java,因为在那里支持其他语言还不完善。

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

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

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

        在此基础上,您可以在HTML / JS-UI和.NET逻辑之间构建中介层(ViewModels,controllers,...)...