I’ve been tried to put a button at my class at Jython. I’m using SWT components to create my GUI. The button doesn’t appear, but the window appear normally. I already create this class at Java, and works well.
This is my code, what is wrong?
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()
There are multiple issues:
self.shell.open(). You are callingcreate_button()after opening the shell !! See the javadoc ofshell.open().RowLayout, then creating aGridDataand then setting aFillLayout. I won’t tell you the problem. Run the code and see.Working Example From Your Snippet
Output-