Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 26, 2009 19:30:35

frpaul
От:
Зарегистрирован: 2009-08-21
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

Внешний обработчик событий в GUI

Я никак не могу врубиться в объектную модель.
Можно вот так делать, или неправильно?
Как надо?

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()



Офлайн

#2 Авг. 26, 2009 20:45:58

Griffon
От: Ukrain, Zaporozhie
Зарегистрирован: 2009-03-04
Сообщения: 324
Репутация: +  11  -
Профиль   Отправить e-mail  

Внешний обработчик событий в GUI

А как требуется? Или как хочется?
Вообще согласно “Tkinter reference: a GUI for Python”, Entry может выглядеть и так.

text = StringVar()
Entry(master, textvariable=text)
А затем text.set(“some text”), text.get().

Да и вообще вариантов реализации много.



Отредактировано (Авг. 26, 2009 20:47:11)

Офлайн

#3 Авг. 26, 2009 21:40:14

frpaul
От:
Зарегистрирован: 2009-08-21
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

Внешний обработчик событий в GUI

Спасибо за ответ! Да, пожалуй вариант со строковой переменной - самый простой.
Мне просто хотелось заодно понять как работают объекты. Особенно, как взаимодействуют два несвязанных наследованием класса. Стал обдумывать варианты, и пришло в голову в один класс помещать другой, как здесь. Но оказалось сложновато. Как еще с помощью объектов можно это взаимодействие организовать, но проще? Мне кажется я здесь уж черезчур все усложнил. Хочется обсчитывать полученные из Gui данные снаружи, в перспективе - в отдельном модуле.
Читаю Лутца, Сузи. Кое-что проясняется, но все-таки никак не могу окончательно врубиться.



Офлайн

#4 Авг. 26, 2009 22:41:46

Griffon
От: Ukrain, Zaporozhie
Зарегистрирован: 2009-03-04
Сообщения: 324
Репутация: +  11  -
Профиль   Отправить e-mail  

Внешний обработчик событий в GUI

В классе рисующем GUI просто содержится экземпляр класса реализующего логику.
У вас реализовано так же.

Нет смысла передавать обьект класса Run как параметр в данном случае. Можно просто написать self.runner = Run(), а затем можно так же само вызвать метод self.draw() в теле конструктора.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version