2009-02-05 25 views

Trả lời

18

Cho rằng bạn có thể sử dụng tất cả các lớp Java từ bên trong Jython, bạn cũng có thể sử dụng SWT.

Ví dụ, chuyển thể từ một SWT snippet, hãy chắc chắn bạn có jar SWT trên classpath của bạn:

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

Cảm ơn bạn Torsten, có vẻ rất dễ dàng. (Xin lỗi không thể upvote bây giờ) – Natascha

+0

Ah, nó sẽ không mất nhiều thời gian cho đến khi bạn có thể làm điều đó. –

5

Trên thực tế, không có nhu cầu về một mô-đun đặc biệt. This talk bởi Sean McGrath có một ví dụ đơn giản về GUI Jython/SWT.

Slide 11 của buổi nói chuyện bắt đầu với:

""" 
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 * 

Nó cho thấy rằng SWT là có thể sử dụng trực tiếp từ Jython. full example nằm ngay tại trang web của Sean.

+0

để gimel: Cảm ơn bạn! – Natascha

9

Jython có một vài thành phần khác giúp làm sạch mã.

Jython Automagically dịch getters & setters vào tài sản công cộng để

ok.setText ("OK") 

trở nên đơn giản

ok.text = 'OK' 

Sau đó bạn có thể cung cấp cho họ như các đối số được ghi tên vào constructor. Jython cũng xử lý việc tạo đối tượng người nghe cho trình xử lý sự kiện của bạn:

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

Biểu mẫu "ok.text = 'Ok'" là Jython thành ngữ hơn (có nghĩa là, nó có nhiều Pythonic hơn - nó trông và cảm thấy giống mã Python) –

Các vấn đề liên quan