【问题标题】:Jython - attempting to call functions from JFrame, receiving 'NoneType' errorJython - 尝试从 JFrame 调用函数,收到“NoneType”错误
【发布时间】:2010-10-03 14:26:05
【问题描述】:

所以我在玩 Jython,试图拼凑一个通用的 GUI。除了他们在 Jython Wiki 上的摇摆示例之外,别无其他。所以我声明了一个 JFrame,然后尝试添加一个面板,一些文本字段,所有这些好东西。但是,当我运行它时出现此错误。 "'NoneType' 对象没有属性 'add'"

这是我的基本代码。

from javax.swing import *
frame = JFrame('E-mail Gathering', defaultCloseOperation = JFrame.EXIT_ON_CLOSE, size =(600,400), locationRelativeTo = None).setVisible(True)
pnl = JPanel()
frame.add(pnl)
self.textfield1 = JTextField('username:',15)
pnl.add(self.textfield1)
self.textfield2 = JTextField('password:', 15)
pnl.add(self.textfield2)
mailButton = JButton('Login',actionPerformed=self.checkmail)
pnl.add(mailButton)
frame.pack()
frame.setVisible(True)

我知道它崩溃的相关部分在 'frame.add(pnl)' 并出现上述错误。我想我会把剩下的扔在那里,以防万一我犯了更大的错误。我觉得我没有正确地将框架声明为 JFrame 的地方出了点问题,但我知道情况并非如此,因为如果我不尝试向其中添加任何内容,它就可以很好地创建框架。

感谢您的任何意见或建议。

【问题讨论】:

  • 您可能已经知道这一点,但您不应该使用from foo import *,除非在玩具脚本或解释器中用作速记。即便如此,这也可以说是个坏主意。
  • 我实际上是一个新手,我不知道。你应该怎么把它放进去,为什么我这样做的方式不好?
  • 只导入您需要避免名称冲突/歧义的内容,例如在java.util.Listjava.awt.List 之间。

标签: python swing jython


【解决方案1】:

在这一行:

frame = JFrame('E-mail Gathering', defaultCloseOperation = JFrame.EXIT_ON_CLOSE, size =(600,400), locationRelativeTo = None).setVisible(True)

您正在创建一个JFrame,调用它的setVisible 方法,并将setVisible 的返回值分配给framesetVisible doesn't return a value,所以frameNone。这会导致frame.add 失败。

当您在最后调用setVisible 时,因为您可能不想在添加其他组件并调用pack 之前使框架可见,所以只需删除setVisible 调用:

frame = JFrame('E-mail Gathering', defaultCloseOperation = JFrame.EXIT_ON_CLOSE, size =(600,400), locationRelativeTo = None)

【讨论】:

    猜你喜欢
    • 2019-01-05
    • 2017-01-14
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 2011-07-02
    • 1970-01-01
    • 2021-03-28
    相关资源
    最近更新 更多