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

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

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

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

【问题讨论】:

    标签: javascript python html css user-interface


    【解决方案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

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

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

                【讨论】:

                【解决方案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");
                      }
                  }
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2013-12-30
                    • 1970-01-01
                    • 2020-06-11
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-06-03
                    • 2012-06-02
                    • 2014-01-20
                    相关资源
                    最近更新 更多