Das SWT-Gui sieht sehr gut aus. Gibt es eine einfache Möglichkeit, es in Jython zu verwenden?Ist es möglich, SWT von Jython zu verwenden?
Antwort
Vorausgesetzt, dass Sie alle Java-Klassen aus Jython verwenden können, ist es auch möglich, SWT zu verwenden.
Für das Beispiel von einem SWT snippet angepasst, stellen Sie sicher, dass Sie das SWT Glas auf CLASSPATH haben:
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()
Eigentlich gibt es keine Notwendigkeit für ein spezielles Modul. This talk von Sean McGrath enthält ein einfaches Beispiel für eine Jython/SWT-GUI.
Folie 11 des Vortrags beginnt mit:
"""
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 *
Es zeigt, dass SWT von Jython direkt nutzbar ist. Die full example ist direkt bei Sean.
an gimel: Danke! – Natascha
Jython hat ein paar andere Feinheiten, die den Code sauberer macht.
Jython übersetzt automagically Getter & Setter in öffentlichen Eigenschaften, so dass
ok.setText ("OK")
einfach
ok.text = 'OK'
Sie wird dann als benannte Argumente an den Konstruktor übergeben kann. Jython behandelt auch das Erstellen von Listener-Objekten für Ihre Event-Handler:
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)
Die „ok.text =‚Ok‘“ Form ist mehr idiomatische Jython (das heißt, es Pythonic ist - es sieht aus und fühlt sich eher wie Python-Code) –
Vielen Dank Torsten, es sieht sehr einfach aus. (Sorry, kann jetzt nicht upvote) – Natascha
Ah, es wird nicht lange dauern, bis Sie das tun können. –