我有类似的JavaFX示例Jython代码:
# hello.py
from javafx.application import Application
from javafx.scene import Scene
import javafx.scene.control
from javafx.scene.layout import AnchorPane
class Hello(Application):
def start(self, stage):
stage.setTitle("Hello, World!")
root = AnchorPane()
label = javafx.scene.control.Label("Hello, World!")
root.getChildren().add(label)
scene = Scene(root, 100, 40)
stage.setScene(scene)
stage.show()
if __name__ == '__main__':
Application.launch(Hello().class, [])
在这里,我可以执行import javafx.scene.control
,然后像javafx.scene.control.Label("Hello, World!")
一样使用它,但为什么我不能from javafx.scene.control import Label
?
这里的Jython信息:
$ jython
Jython 2.5.3 (2.5:c56500f08d34+, Aug 13 2012, 14:48:36)
[Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.8.0_25
Type "help", "copyright", "credits" or "license" for more information.
>>>
答案 0 :(得分:2)
如果您在from
方法内移动了import
/ start
语句,则在您需要Label
控件之前,我打赌您的代码可以正常运行。
在JavaFX8上运行Jython时,在JavaFX运行时启动之前,有些事情是您无法做到的(例如导入控件)。 (JavaFX2不是那么挑剔。)因此,启动JavaFX运行时是Jython / JavaFX程序应该做的第一件事。 (我有一个专门用于执行此操作的模块。)然后您可以导入其他所有内容。
顺便说一句,我认为您不想使用from
/ import
方法,而是使用import
/ as
方法。前者无法缓存,而后者则没有。