我曾尝试在 Jython 的课堂上设置一个按钮。我正在使用 SWT 组件来创建我的 GUI。按钮不出现,但窗口正常出现。我已经在 Java 中创建了这个类,并且运行良好。
这是我的代码,有什么问题?
from java.lang import Thread as JThread, InterruptedException
from org.eclipse.swt import widgets, layout, SWT
from org.eclipse.swt.layout import GridLayout, GridData, FillLayout
from org.eclipse.swt.widgets import Composite, Listener#, Event
from org.yakindu.sct.runtime.java.new64 import New64CycleBasedStatemachine
import time
class Cycle(object):
def __init__(self):
self.display = widgets.Display()
self.shell = widgets.Shell(self.display, SWT.SHELL_TRIM | SWT.APPLICATION_MODAL)
self.shell.setLayout(layout.RowLayout())
self.shell.setText("Message Window")
self.shell.setLocation(300, 300)
self.shell.setSize(300, 150)
self.thread = JThread()
self.shell.open()
def run(self):
self.statemachine = New64CycleBasedStatemachine()
self.statemachine.enter()
while not self.thread.isInterrupted():
self.statemachine.getInterfaceNewTest().getVarMessage()
self.statemachine.runCycle()
try:
time.sleep(100)
except InterruptedException:
self.thread.interrupt()
self.thread.start()
def show_window(self):
while not self.shell.isDisposed():
if not self.display.readAndDispatch():
self.display.sleep()
self.display.dispose()
self.thread.interrupted()
def create_button(self, statemachine, shell):
self.buttonComposite = Composite(shell, SWT.NO_SCROLL)
self.buttonCompositeGridData = GridData()
self.buttonCompositeGridData.horizontalAlignment = GridData.FILL
self.buttonCompositeGridData.grabExcessHorizontalSpace = True
self.buttonComposite.setLayoutData(self.buttonCompositeGridData)
self.buttonCompositeLayout = FillLayout()
self.buttonCompositeLayout.type = SWT.HORIZONTAL
fillLayout = FillLayout()
self.buttonComposite.setLayout(fillLayout)
self.button = widgets.Button(self.buttonComposite, SWT.PUSH);
self.button.setText("Ok")
foo = Cycle()
foo.run()
foo.create_button()
foo.show_window()