Найти - Пользователи
Полная версия: Внешний обработчик событий в GUI
Начало » Python для новичков » Внешний обработчик событий в GUI
1
frpaul
Я никак не могу врубиться в объектную модель.
Можно вот так делать, или неправильно?
Как надо?

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()
Griffon
А как требуется? Или как хочется?
Вообще согласно “Tkinter reference: a GUI for Python”, Entry может выглядеть и так.
text = StringVar()
Entry(master, textvariable=text)
А затем text.set(“some text”), text.get().

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

Нет смысла передавать обьект класса Run как параметр в данном случае. Можно просто написать self.runner = Run(), а затем можно так же само вызвать метод self.draw() в теле конструктора.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB