如何编写一个桌面应用程序,它使用 HTML 和 CSS 作为用户界面,使用 python/perl/c++/java 进行处理?

Posted

技术标签:

【中文标题】如何编写一个桌面应用程序,它使用 HTML 和 CSS 作为用户界面,使用 python/perl/c++/java 进行处理?【英文标题】:how to write a desktop application which uses HTML and CSS for user interface and python/perl/c++/java for the processing? 【发布时间】:2011-04-19 20:20:09 【问题描述】:

不同的语言有不同的 GUI 工具包,但看起来很难像我们使用 html 和 CSS 一样轻松地实现有吸引力的用户界面。 我不使用 javascript 执行我的应用程序,因为我怀疑它是否具有所有必需的库并且我想在 python 中执行它。

如何在 python 中使用 gecko、webkit 等渲染引擎?哪一个更适合与 python 一起工作?有没有没有 javascript 的“仅 html/css”渲染引擎?

为 DOM 事件编写事件处理程序并在 python 中操作 DOM 会很容易吗?

【问题讨论】:

【参考方案1】:

你可能想用几种方法来解决这个问题:最简单的可能是使用像Adobe AIR 这样的东西,它基本上是一个带有扩展 javascript 引擎的 Webkit 渲染引擎,它允许你在更复杂的功能。

否则,您可以查看wxWebConnect 项目,该项目旨在使“开发人员能够将高级 Web 浏览器功能快速集成到他们自己的应用程序中”。并作为 wxWidgets 控件库提供,这是大多数 Python 开发人员应该熟悉的。它将 Mozilla Gecko 渲染引擎集成到您的应用程序中。

【讨论】:

【参考方案2】:

Remote Control Toolkit 基本上就是这样做的。它允许您编写在浏览器显示中呈现的桌面(编程)风格的应用程序。

即使它试图为您隐藏 html/css/js 详细信息,您也可以使用新的小部件扩展系统或扩展现有的小部件,基本上使用 html(5)、css、js 提供的所有内容。

与睡衣或 GWT 不同,它不会编译为 javascript。您的代码保留在服务器端,您基本上可以做任何您习惯做的事情(打开文件、打开连接、保持状态等)

【讨论】:

【参考方案3】:

补充其他人已经给出的选项:

一些 webkit 绑定:

qtwebkit(用于 pyqt 或 pyside) wxwebkit(还没有准备好,但是有一个 wxpython 的预发布版本) pywebkitgtk(不知道在 Windows 上搞定有多容易)

至于 gecko/mozilla,你可以看看 PyXPCOM,可能是通过pyxpcomext。这里的区别 - 如果我理解正确的话 - 不是在 python 中使用 mozilla,而是 python 嵌入到 mozilla 中。但是应该可以做一个可以使用python的xulrunner应用。

【讨论】:

【参考方案4】:

您应该查看 Mozilla 的 XUL project。它允许您使用 HTML 轻松构建应用程序,并使用实际的 CSS “样式化” GUI。

【讨论】:

【参考方案5】:

更新:这是一个旧答案,现在你想在你的应用程序中使用嵌入式浏览器(*webkit 项目等),但在撰写本文时,不存在这样的技术。但是,如果您不想在打包的应用程序中添加相当多的兆字节,那么答案仍然有效。


找到一个轻量级服务器,或者更好的服务器 - 嵌入一个到您的应用程序中。就是这样。

Java 有用于服务 http 的类。 Python 也做得很好。

看看 mercurial 的 hg serve 是如何工作的。 [蟒蛇]

我曾经做过一个小应用程序,它通过 httprequest 类在 java 中的 localhost 上通过 http 提供拼写检查。 [在win和linux上工作]

将您的应用程序创建为输出一些 html 并使用 POST 执行操作的服务器。用 HTML+CSS+JS 做界面的事情。很好很容易。

运行后将用户指向 localhost:somesillyport 或触发在浏览器中打开 localhost:somesillyport。

【讨论】:

【参考方案6】:

如果您特别询问了一种后端语言,我会将此回复作为评论而不是完整的问题。然而,这个问题非常广泛...询问在 四种 后端语言之一中使用 HTML/CSS 界面。

既然如此,您应该在以下网站上进行一系列网络搜索:

"html renderer" [insert-language-here]

... 并花一些时间浏览可用于将 HTML/CSS 界面嵌入后端语言应用程序的各种选项。

最终,您很可能最终会使用 Mozilla 的 Gecko 渲染器……无论是原始形式,还是间接通过提供对开发人员友好的包装器的众多库之一。

说到 Mozilla 技术,您可能还想看看 XULRunner(让您可以轻松地将使用 XML 与 CSS 和 JavaScript 的 UI 组合在一起),或者甚至可能是 Prism(在 HTTP 服务器上运行一个应用程序并将其呈现给用户作为桌面应用程序)。

【讨论】:

【参考方案7】:

如果您使用 Java 编写代码,请查看 JavaFX。来自官网:

嵌入式浏览器使您能够在 您的 JavaFX 应用程序:

Render HTML content from local and remote URLs

Obtain Web history

Execute JavaScript commands

Perform upcalls from JavaScript to JavaFX

Manage web pop-up windows

Apply effects to the embedded browser

【讨论】:

JavaFX 实际上是内部的 webkit 吗?很难找到这方面的信息,而且最不需要的就是 Y.A.B. (又一个浏览器)【参考方案8】:

如果您要将其移植到 Windows,我强烈推荐 HTMLLayout

    它们允许您使用 HTML 和 CSS 编写 UI,并且您可以使用 C++ 处理代码来处理它。 它还允许您在 TI 脚本(如 Java 脚本)中编写验证脚本,以在处理输入之前对其进行验证。 二进制文件大小略低于 1MB,因此您可以轻松地将其与二进制文件一起打包。 它是开源的/免费使用。 它还允许您制作基于 TIScript/CSS 的动画。

据我所知,它最适合在 Windows 上开发 GUI 应用程序。

【讨论】:

看起来不像是开源的terrainformatica.com/htmlayout/prices.whtm【参考方案9】:

检查Sciter,它被设计为完全可嵌入的 HTML/CSS/脚本引擎,用作桌面应用程序的 UI 层。

您可能还会发现 CodeProject 上的 Sciter technology introduction 文章很有用。

Sciter 包含的TIScript 几乎是“Python 但具有 JavaScript 语法”。

【讨论】:

【参考方案10】:

您可以将 Web 浏览器组件嵌入到您的 Java Swing/JavaFX 桌面应用程序中,该应用程序显示使用 HTML5+CSS+JavaScript 构建的 GUI。你可以在http://java.dzone.com/articles/htmlcssjavascript-gui-java-0看到一篇描述如何做到这一点的文章

JxBrowser 是允许将 Chromium 嵌入 Java 应用程序的 Java Swing/JavaFX 库之一。使用 JxBrowser API,您可以加载任何网页并使用其 DOM 和 JavaScript。您甚至可以从 JavaScript 代码调用 Java 方法,反之亦然。例如:

import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.BrowserFunction;
import com.teamdev.jxbrowser.chromium.JSValue;
import com.teamdev.jxbrowser.chromium.events.FinishLoadingEvent;
import com.teamdev.jxbrowser.chromium.events.LoadAdapter;

public class JavaScriptJavaSample 
    public static void main(String[] args) 
        Browser browser = new Browser();
        browser.registerFunction("MyFunction", new BrowserFunction() 
            public JSValue invoke(JSValue... args) 
                for (JSValue arg : args) 
                    System.out.println("arg = " + arg);
                
                return JSValue.create("Hello!");
            
        );
        browser.addLoadListener(new LoadAdapter() 
            @Override
            public void onFinishLoadingFrame(FinishLoadingEvent event) 
                if (event.isMainFrame()) 
                    Browser browser = event.getBrowser();
                    JSValue returnValue = browser.executeJavaScriptAndReturnValue(
                            "MyFunction('Hello JxBrowser!', 1, 2, 3, true);");
                    System.out.println("return value = " + returnValue);
                
            
        );
        browser.loadURL("about:blank");
    

【讨论】:

以上是关于如何编写一个桌面应用程序,它使用 HTML 和 CSS 作为用户界面,使用 python/perl/c++/java 进行处理?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C#/pinvoke 将输入发送到 WinSta0\Winlogon 桌面

如何在 FLTK 中编写面板任务栏以在 Linux 系统上使用

如何使用 Bash 编写二进制文件?

使用 qt 和 django 创建桌面应用

如何在 C++ 中编写独立于平台的包装函数 [重复]

耦合 - C++ Web 或 GUI 桌面应用程序