2009-02-05 20 views

Respuesta

18

Dado que puede usar todas las clases de Java desde Jython, también es posible usar SWT.

Para el ejemplo, adaptado de un SWT snippet, asegúrese de que tiene el frasco SWT en su CLASSPATH:

import org.eclipse.swt as swt 
import org.eclipse.swt.widgets as widgets 
import org.eclipse.swt.layout as layout 

result = None 

display = widgets.Display() 

shell = widgets.Shell(display) 
shell.pack() 
shell.open() 

dialog = widgets.Shell(shell, swt.SWT.DIALOG_TRIM | swt.SWT.APPLICATION_MODAL) 
dialog.setLayout(layout.RowLayout()) 

ok = widgets.Button(dialog, swt.SWT.PUSH) 
ok.setText ("OK") 
cancel = widgets.Button(dialog, swt.SWT.PUSH); 
cancel.setText("Cancel"); 

class MyListener(widgets.Listener): 
    def handleEvent(self, event): 
     global result 
     result = event.widget == ok 
     dialog.close() 

listener = MyListener() 
ok.addListener(swt.SWT.Selection, listener) 
cancel.addListener(swt.SWT.Selection, listener) 

dialog.pack() 
dialog.open() 
while not dialog.isDisposed(): 
    if not display.readAndDispatch(): 
     display.sleep() 
print "Result:", result 
display.dispose() 
+0

Gracias Torsten, parece muy fácil. (Lo siento, no puedo votar ahora) – Natascha

+0

Ah, no pasará mucho tiempo hasta que puedas hacer eso. –

5

En realidad, no hay necesidad de un módulo especial. This talk por Sean McGrath contiene un ejemplo simple de una GUI de Jython/SWT.

Transparencia 11 de la charla comienza con:

""" 
Simple SWT Example 
Sean McGrath 
""" 
from org.eclipse.swt.events import * 
from org.eclipse.swt.graphics import * 
from org.eclipse.swt.layout import * 
from org.eclipse.swt.widgets import * 
from org.eclipse.swt.layout.GridData import * 
from org.eclipse.swt import * 

Muestra que SWT es directamente utilizable a partir de Jython. El full example está justo allí en el sitio de Sean.

+0

a gimel: ¡Gracias! – Natascha

9

Jython tiene algunas otras sutilezas que hacen que el código sea más limpio.

Jython traduce automagicamente captadores & set en propiedades públicas para que

ok.setText ("OK") 

se convierte simplemente en

ok.text = 'OK' 

Luego, puede suministrar como argumentos el nombre del constructor. Jython también maneja la creación de objetos de escucha para los controladores de eventos:

def handleEvent(self, event): 
    global result 
    result = event.widget == ok 
    dialog.close() 

ok = widgets.Button(dialog, swt.SWT.PUSH 
     text='OK', 
     widgetSelected=handleEvent) 
cancel = widgets.Button(dialog, swt.SWT.PUSH 
     text='Cancel', 
     widgetSelected=handleEvent) 
+0

La forma "ok.text = 'Ok'" es más idiomática que Jython (es decir, es más pitonica, se ve y se siente más como código de Python) –