2009-02-05 15 views

risposta

18

Dato che è possibile utilizzare tutte le classi Java da Jython, è anche possibile utilizzare SWT.

Per l'esempio, tratto da un SWT snippet, assicurarsi di avere il vaso SWT sul vostro 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

Grazie Torsten, sembra molto facile. (Scusa non posso invitare ora) – Natascha

+0

Ah, non ci vorrà molto tempo prima che tu possa farlo. –

5

In realtà, non v'è alcuna necessità di un modulo speciale. This talk di Sean McGrath contiene un semplice esempio di una GUI Jython/SWT.

diapositive 11 del colloquio inizia 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 * 

Essa mostra che l'Altissimo è direttamente utilizzabile da Jython. Il full example è proprio lì sul sito di Sean.

+0

to gimel: Grazie! – Natascha

9

Jython ha alcune altre sottigliezze che rendono il codice più pulito.

Jython traduce automagically getter & setter in proprietà pubbliche in modo che

ok.setText ("OK") 

diventa semplicemente

ok.text = 'OK' 

È quindi possibile fornire come nome argomenti al costruttore. Jython gestisce anche la creazione di oggetti listener per i gestori di eventi:

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'" è più idiota di Jython (cioè, è più Pythonic - sembra e si sente più simile al codice Python) –

Problemi correlati