我正在使用来自Jython的Swing制作GUI.事件处理似乎从Jython特别优雅,只是设置
JButton("Push me", actionPerformed = nameOfFunctionToCall)
Run Code Online (Sandbox Code Playgroud)
但是,在课堂上尝试同样的事情变得困难.天真的尝试
JButton("Push me", actionPerformed = nameOfMethodToCall)
Run Code Online (Sandbox Code Playgroud)
要么
JButton("Push me", actionPerformed = nameOfMethodToCall(self))
Run Code Online (Sandbox Code Playgroud)
从类的GUI构造方法不起作用,因为要调用的方法的第一个参数应该是self,以便访问类的数据成员,另一方面,它不可能通过通过AWT事件队列的事件处理程序的任何参数.唯一的选择似乎是使用lambda(在http://www.javalobby.org/articles/jython/上建议),结果是这样的:
JButton("Push me", actionPerformed = lambda evt : ClassName.nameOfMethodToCall(self))
Run Code Online (Sandbox Code Playgroud)
它有效,但优雅已经消失.所有这一切只是因为被调用的方法需要从某个地方进行自引用.还有其他方法吗?
我有一个讨厌Java的历史,在90年代末的"慢球"时代经常使用它.因此,我从未真正学到它.据我所知,Java实际上是一种非常好用的语言.我一直在考虑因为Jython和Clojure而潜入它.也就是说,我想用Java编程并在适当的地方使用内联Jython或Clojure.但说实话,我可能只是在Jython/jRuby中编程并从那里调用clojure.
这让我想到了我的问题.我知道这两种语言都可以从Java调用,但这是否一定是好的做法?如果我只想使用Jython作为主要语言,我是否应该费心学习java?看到这是我的动机中的很大一部分,我想知道在进入之前我并没有被误导.我知道如果用多种语言进行项目成为一个kludge的风险很高像这样.
我还在学习JVM之类的东西,所以如果这个问题很明显,我会道歉.
我想说"与Swing相比最好的python GUI"......但严厉地说我的问题是"过于主观".我为机器中的确定性幽灵道歉.
我目前正在使用Jython ...在使用Java数年之后,它已经使用了6个月.我喜欢Jython能够调用所有Java类,以及简化从Java方式到Python方式的转换.
但考虑到这一点,我意识到到目前为止我使用的最常见的Java包是Swing的.我花了很多年与Swing搏斗,最后认为我有一种身体锁定的野兽.顺便说一句,我也认为Swing很棒,而且我不得不说我是键盘狂热者,所以不想切换到你没有权力的图形用户界面. ActionMap-InputMap,可能并不是很多人关心的.真的让我回到JTree和JTable上也是一种耻辱,花了很多时间撕掉我头发上留下的东西.说真的,他们非常强大......
但与此同时,我很快就迷上了Python的做事方式.我可以并且打算坚持使用Jython.但我只是想知道各种CPython GUI是什么样的......特别是它们的功能和多功能性与Swing相比如何?
补充:我被要求提供一些细节:好的,如果你想要的话,坐在滚动窗格上的树GUI对象怎么样,可以使用键盘来控制导航和折叠/扩展节点...滚动自动发生(如果你想要的话)和你可以控制外观和感觉的地方等.或者你可以全面控制调整大小的表格,以及当单个细胞获得/失去焦点时会发生什么.您可以在哪里子类化渲染器和编辑器.正如我在评论中所说的那样,一个热衷于此的人,以及Swing的大用户,但仍然转向了CPython GUI并且感到高兴/不快......可能是回答这个问题的理想人选.
我在Java项目中使用Jython.
我有一个Java类:myJavaClass.java和一个Python类:myPythonClass.py
public class myJavaClass{
public String myMethod() {
PythonInterpreter interpreter = new PythonInterpreter();
//Code to write
}
}
Run Code Online (Sandbox Code Playgroud)
Python文件如下:
class myPythonClass:
def abc(self):
print "calling abc"
tmpb = {}
tmpb = {'status' : 'SUCCESS'}
return tmpb
Run Code Online (Sandbox Code Playgroud)
现在问题是我想abc()从myMethod我的Java文件的方法调用我的Python文件的方法并打印结果.
我正在开发一个散布一堆jython和java代码的应用程序.由于程序的性质(使用wsadmin),我们实际上仅限于Python 2.1
我们目前有一个包含java源和.py模块的jar.该代码目前使用java调用,但我想删除它,以支持尽可能多的功能迁移到jython.
我遇到的问题是我想从调用jython脚本导入或执行现有jar文件中的python模块.我尝试了几种不同的方法但没有成功.
我的目录结构如下:
application.jar
|-- com
|--example
|-- action
|-- MyAction.class
|-- pre_myAction.py
Run Code Online (Sandbox Code Playgroud)
我试过的第一种方法是从罐子里进口.我将jar添加到我的sys.path并尝试使用import com.example.action.myAction 导入模块并导入myAction.但是,即使我将init .py文件放入每个级别的目录中也没有成功.
我尝试的第二种方法是使用java类加载资源.所以我写了下面的代码:
import sys
import os
import com.example.action.MyAction as MyAction
scriptName = str(MyAction.getResource('/com/example/action/myAction.py'))
scriptStr = MyAction.getResourceAsStream('/com/example/action/myAction.py')
try:
print execfile(scriptStr)
except:
print "failed 1"
try:
print execfile(scriptName)
except:
print "failed 2"
Run Code Online (Sandbox Code Playgroud)
这两个都失败了.关于我该如何继续,我现在有点不知所措.有任何想法吗 ?
干杯,
特雷弗
我正在使用Java编写的库来处理几个Jython项目.由于autodoc扩展,我想用Sphinx创建一些好的文档.但是当我尝试创建html时,我得到错误,因为autodoc找不到用Java编写的库:
sphinx-build -b html -d _build/doctrees . _build/html
Running Sphinx v1.0.5
loading pickled environment... done
building [html]: targets for 1 source files that are out of date
updating environment: 0 added, 1 changed, 0 removed
reading sources... [100%] index
/Users/myName/myJythonProject/doc/index.rst:14: (WARNING/2)
autodoc can't import/find module 'myJythonProject', it reported error:
"global name 'PoolManager' is not defined",
please check your spelling and sys.path
Run Code Online (Sandbox Code Playgroud)
其中PoolManager是Java类.
任何人都可以帮我解决这个问题吗?
在jython中,我有一类像这样定义的对象:
class Item:
def __init__(self, pid, aisle, bay, hits, qtyPerOrder):
self.pid = pid
self.aisle = int(aisle)
self.bay = bay
self.hits = int(hits)
self.qtyPerOrder = int(qtyPerOrder)
Run Code Online (Sandbox Code Playgroud)
我创建了一个名为"list"的类列表,该类列表中的项目有4000~行,如下所示:
'PO78141', 13, ' B ', 40
Run Code Online (Sandbox Code Playgroud)
我试图随机选择一个范围为3和20的数字,称为x.然后,代码将在列表中选择x行.
例如:如果x = 5,我希望它返回:
'PO78141', 13, ' B ', 40
'MA14338', 13, ' B ', 40
'GO05143', 13, ' C ', 40
'SE162004', 13, ' F ', 40
'WA15001', 13, ' F ', 40
Run Code Online (Sandbox Code Playgroud)
编辑 好吧,这似乎工作.但是,它将返回此< main .Item对象0x029990D0>.我如何让它以上述格式返回?
我想用Jython运行Python脚本.
结果显示正确,但同时有一条警告消息,"sys-package-mgr*:无法创建包缓存目录"
我怎么能解决这个问题?
提前谢谢~~~
我有一个关于将json放入我的jython脚本的问题.这是我的情景:
因此,有了这些限制,我想在我的笔记本电脑上使用字典对象,将其转换为json,将其传递给托管的jython应用程序,然后使用本机jython或java工具将其转换回该字典对象,以便我可以继续工作在我托管在云端的脚本中.
我已经知道如何在"常规" python中执行此操作.这很简单.导入json并疯狂.但我的java功夫很弱,我以前从未在jython工作过.
所以我试图弄清楚这是否可以使用jython底层的java可靠而轻松地做到这一点,或者如果我最好使用像ast这样的东西,只需将字典作为字符串文字发送.我真的更喜欢坚持使用json,因为人们喜欢json的所有正常原因,所以任何帮助利用java库来完成这项工作将不胜感激.