Jython классы и область видимости переменных - PullRequest
2 голосов
/ 10 сентября 2010

Что я хочу знать, так это то, как я могу создавать элементы GUI, используя Swing внутри класса Jython, чтобы на них можно было ссылаться извне класса, и я могу использовать операторы типа button.setText("Hello") для объекта, который был создан внутри другого учебный класс. Например:

foo.py:

 from javax.swing import *
 class Test():

    def __init__(self):
        frame = JFrame("TEST")
        button = JButton("Hey")
        frame.add(button)
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
        frame.setSize(300,200)
        frame.show()

а затем у меня есть еще один файл с именем someelse.py:

from foo import *
run = Test()

Если бы я захотел изменить текст кнопки с помощью run.button.setText("Message"), как бы я мог организовать класс Test() так, чтобы я мог изменить текст из второго файла, somethingelse.py.

1 Ответ

1 голос
/ 10 сентября 2010

Ваш код отбрасывает ссылки на элементы управления, поэтому вы не можете получить к ним доступ из любого места - frame и button являются локальными переменными и исчезают при возврате __init__.

Вы должны (как минимум) сделать их объектами-членами:

class Test():

    def __init__(self):
        self.frame = JFrame("TEST")
        self.button = JButton("Hey")
        self.frame.add(button)
        # ...

Затем вы можете сказать:

from foo import *
run = Test()
run.button.setText("Message")
...