我已经尝试在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()
答案 0 :(得分:0)
有很多问题:
self.shell.open()
的位置。在打开 shell之后,您正在调用create_button()
!请参阅shell.open()
。RowLayout
,然后创建GridData
,然后设置FillLayout
。我不会告诉你这个问题。运行代码并查看。从您的代码段中的工作示例
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
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)
def show_window(self):
self.shell.open() // I have moved it here. After all the control creation !!
while not self.shell.isDisposed():
if not self.display.readAndDispatch():
self.display.sleep()
self.display.dispose()
def create_button(self):
self.buttonComposite = Composite(self.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.create_button()
foo.show_window()
<强> Output-
强>