2010-10-01 9 views
11

Los diferentes idiomas tienen diferentes juegos de herramientas GUI, pero parece muy difícil lograr atractivas interfaces de usuario lo mejor que podamos usando HTML y CSS con menos esfuerzo. No hago mi aplicación en javascript ya que dudo si tiene todas las bibliotecas requeridas y quiero hacerlo en python.cómo escribir una aplicación de escritorio que utiliza HTML y CSS para la interfaz de usuario y python/perl/C++/java para el procesamiento?

¿Cómo utilizar motores de renderizado como gecko, etc webkit en Python? ¿Cuál será más adecuado para trabajar con Python? ¿Hay algún motor de renderizado "solo html/css" sin javascript?

¿Será fácil para escribir controladores de eventos para eventos DOM y manipular DOM en Python?

Respuesta

0

actualización: Esta es una respuesta anterior, hoy en día desea utilizar un navegador integrado en su aplicación (* proyectos de webkit, etc.), pero en el momento de redactar este documento, no existía tal tecnología. La respuesta sigue siendo válida si no quiere agregar bastantes megabytes a su aplicación empaquetada.


encontrar un servidor ligero, o mejor - incrustar uno en su aplicación. Eso es.

Java tiene clases para servir http. Python también lo hace bien.

Vea cómo funciona mercurial's hg serve. [python]

Una vez hice una pequeña aplicación que servía la revisión ortográfica de aspell a través de http en localhost en java con la clase httprequest. [funcionó en win y linux]

Crea tu aplicación como un servidor que produce algunos html y usa POST para realizar acciones. Haga lo de la interfaz en HTML + CSS + JS. Bonito y fácil.

Después del punto de ejecución el usuario a localhost: somesillyport o desencadenar la apertura localhost: somesillyport en un navegador.

1

Hay algunas maneras en que podría querer hacer esto: lo más simple sería usar algo como Adobe AIR, que básicamente es un motor de renderizado Webkit con un motor javascript extendido, que le permite programar más funcionalidad compleja.

De lo contrario, puede consultar el proyecto wxWebConnect, que tiene como objetivo permitir a los desarrolladores "integrar rápidamente capacidades avanzadas de explorador web en sus propias aplicaciones". y se proporciona como una biblioteca de control de wxWidgets, que es algo con lo que la mayoría de los desarrolladores de Python deberían estar familiarizados. Integra el motor de renderizado Mozilla Gecko en su aplicación.

0

Si le hubieran preguntado acerca de un idioma de back-end, en particular, me habría ido esta respuesta como un comentario en lugar de una pregunta de pleno derecho. Sin embargo, la pregunta es extremadamente amplia ... preguntando sobre el uso de una interfaz HTML/CSS en uno de los cuatro lenguajes de back-end.

Siendo ese el caso, sólo debe hacer una serie de búsquedas en la web en:

"html renderer" [insert-language-here]

... y pasar algún tiempo navegando a través de las distintas opciones disponibles para incrustar una interfaz HTML/CSS en una vuelta aplicación de idioma final

En última instancia, lo más probable es que termine usando el renderizador de Gecko de Mozilla ... ya sea en su forma original, o indirectamente a través de una de las numerosas bibliotecas que ofrecen envolturas amigables para desarrolladores a su alrededor.

Hablando de las tecnologías de Mozilla, es posible que también desee ver XULRunner (permite crear fácilmente una interfaz de usuario utilizando XML con CSS y JavaScript), o incluso Prism (toma una aplicación que se ejecuta en un servidor HTTP y la presenta en el usuario como una aplicación de escritorio).

1

que debe salir de Mozilla XUL project. Le permite crear aplicaciones con la facilidad de HTML y "estilo" la GUI con CSS real.

1

Remote Control Toolkit hace esto, básicamente. Le permite escribir aplicaciones de escritorio (programación) que se renderizan en una pantalla del navegador.

Aunque intenta ocultar detalles de html/css/js, puede ampliar el sistema con nuevos widgets o ampliar los existentes, utilizando básicamente todo lo que html (5), css, js ofrece.

A diferencia de los pijamas o GWT, no se compila a javascript. Su código permanece serverside y se puede hacer básicamente todo lo que está acostumbrado a hacerlo (los archivos abiertos, conexiones abiertas, mantener el estado, y así sucesivamente)

1

Como complemento a las opciones ya dadas por otros:

en algunos enlaces webkit:

  • qtwebkit (para pyqt o PySide)
  • wxwebkit (no está listo todavía, pero hay una versión preliminar para wxpython disponible)
  • pywebkitgtk (no sé cómo ea sy que es conseguir que en Windows)

En cuanto a Gecko/Mozilla, es posible echar un vistazo a PyXPCOM, probablemente a través de pyxpcomext. La diferencia aquí - si lo entiendo correctamente - es que en lugar de usar mozilla desde dentro de python, Python se incrusta en mozilla. Pero debería ser posible hacer una aplicación xulrunner que pueda usar python.

0

Si escribe en Java, eche un vistazo a JavaFX. Desde el sitio web oficial:

El navegador integrado le permite realizar las siguientes tareas en sus aplicaciones 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 
+0

¿Es JavaFX realmente webkit internamente? Es difícil encontrar información sobre esto, y lo último que se necesita es Y.A.B. (Sin embargo, otro navegador) –

0

Si van a portarlo a las ventanas, lo recomiendo HTMLLayout

  1. Te permiten escribir la IU en HTML y CSS y puedes tener tu código de procesamiento en C++ para procesarla.
  2. También le permite escribir scripts de validación en el script TI (como Java Script) para validar las entradas antes de procesarlo.
  3. El tamaño binario fue justo por debajo de 1 MB, por lo que puedes empacar fácilmente junto con tus binarios.
  4. Era de código abierto/de uso gratuito.
  5. También le permitirá hacer animaciones basadas en TIScript/CSS.

Que yo sepa, es el mejor para desarrollar aplicaciones de GUI en Windows.

+0

No parece que sea de código abierto http://www.terrainformatica.com/htmlayout/prices.whtm – balki

0

Compruebe Sciter, fue diseñado como exactamente embebible HTML/CSS/scripting engine para ser utilizado como una capa de UI de aplicaciones de escritorio.

También puede encontrar el artículo Sciter technology introduction en CodeProject útil.

Sciter contiene TIScript a bordo que es casi "Python pero con sintaxis de JavaScript".

0

Puede incrustar un componente del navegador web en su aplicación Java Swing/JavaFX Desktop que muestra la GUI construida con HTML5 + CSS + JavaScript. Puede ver un artículo que describe cómo hacerlo al http://java.dzone.com/articles/htmlcssjavascript-gui-java-0

Una de las bibliotecas Java Swing/JavaFX que permite incrustar Chromium en aplicaciones Java es JxBrowser. Usando JxBrowser API puedes cargar cualquier página web y trabajar con su DOM y JavaScript. Incluso puede llamar a métodos Java desde código JavaScript y viceversa. Por ejemplo:

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"); 
    } 
} 
Cuestiones relacionadas