Форум сайта python.su
Я никак не могу врубиться в объектную модель.
Можно вот так делать, или неправильно?
Как надо?
from Tkinter import *
root = Tk()
class Gui:
def __init__(self, runner):
self.runner = runner
def draw(self):
fr = Frame(root)
fr.pack(side=TOP)
self.bt = Button(fr, text='run', command=self.uni)
self.bt.pack(side=LEFT)
self.en = Entry(fr)
self.en.pack(side=RIGHT)
self.en.insert(0, 'poop')
def uni(self):
self.runner(self.en.get())
class Run:
def __call__(self, arg):
print arg
for i in range(5):
Gui(Run()).draw()
root.mainloop()
Офлайн
А как требуется? Или как хочется?
Вообще согласно “Tkinter reference: a GUI for Python”, Entry может выглядеть и так.
text = StringVar()
Entry(master, textvariable=text)
Отредактировано (Авг. 26, 2009 20:47:11)
Офлайн
Спасибо за ответ! Да, пожалуй вариант со строковой переменной - самый простой.
Мне просто хотелось заодно понять как работают объекты. Особенно, как взаимодействуют два несвязанных наследованием класса. Стал обдумывать варианты, и пришло в голову в один класс помещать другой, как здесь. Но оказалось сложновато. Как еще с помощью объектов можно это взаимодействие организовать, но проще? Мне кажется я здесь уж черезчур все усложнил. Хочется обсчитывать полученные из Gui данные снаружи, в перспективе - в отдельном модуле.
Читаю Лутца, Сузи. Кое-что проясняется, но все-таки никак не могу окончательно врубиться.
Офлайн
В классе рисующем GUI просто содержится экземпляр класса реализующего логику.
У вас реализовано так же.
Нет смысла передавать обьект класса Run как параметр в данном случае. Можно просто написать self.runner = Run(), а затем можно так же само вызвать метод self.draw() в теле конструктора.
Офлайн