如何编写一个桌面应用程序,它使用 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 桌面