Помощь в учёбе, очень быстро...
Работаем вместе до победы

Шаблон «Модель —Вид —Контроллер» на примере модуля tkinter

РефератПомощь в написанииУзнать стоимостьмоей работы

Особенностью шаблона MVC является то, что в случае изменения контроллером данных (как это было в предыдущем примере с изменением переменной var) «посылается сигнал» виду с просьбой обновить отображаемое содержимое (перерисовать окно), отсюда возникает обновление текста в режиме реального времени. Следующий пример демонстрирует возможности обработки событий при нажатии на кнопку (виджет Button… Читать ещё >

Шаблон «Модель —Вид —Контроллер» на примере модуля tkinter (реферат, курсовая, диплом, контрольная)

Следующий пример показывает, каким образом использовать виджет (Entry) для ввода данных:

# mytk6. py import tkinter window = tkinter. Tk ().

frame = tkinter. Frame (window) frame. pack ().

var = tkinter. StringVar ().

# Обновление содержимого переменной в момент ввода текста label = tkinter. Label (frame, textvariable=var).

label.pack ().

# Пробуем набрать текст в появившемся поле для ввода entry = tkinter. Entry (frame, textvariable=var) entry. pack ().

window.mainloop ().

Запустим программу и внутри текстового окна попробуем набрать произвольный текст (рис. 4.51).

Виджет для ввода данных.

Рис. 4.51. Виджет для ввода данных

Видим, что текст, который мы набираем, сразу отображается в окне. Дело в том, что виджеты Label и Entry используют для вывода и ввода текста одну и ту же переменную data класса StringVar. Подобная схема работы оконного приложения укладывается в универсальный шаблон (паттерн) MVC. В общем виде под моделью (Model) понимают способ хранения данных (например, в переменной какого класса). Вид (View) служит для отображения данных. Контроллер (Controller) отвечает за обработку данных (рис. 4.52).

Схема шаблона МУС.

Рис. 4.52. Схема шаблона МУС

Особенностью шаблона MVC является то, что в случае изменения контроллером данных (как это было в предыдущем примере с изменением переменной var) «посылается сигнал» виду с просьбой обновить отображаемое содержимое (перерисовать окно), отсюда возникает обновление текста в режиме реального времени. Следующий пример демонстрирует возможности обработки событий при нажатии на кнопку (виджет Button):

# mytk7. py import tkinter.

# Контроллер: функция вызывается в момент нажатия.

# на кнопку def click ():

# метод get возвращает текущее значение counter.

# метод set устанавливает новое значение counter counter. set (counter.get () + 1).

window = tkinter. Tk ().

# Модель: создаем объект класса IntVar counter = tkinter. IntVar{).

# Обнуляем созданный объект с помощью метода set counter. set (0) frame = tkinter. Frame (window) frame. pack ().

# Создаем кнопку и указываем обработчик (функция click).

# при нажатии на нее.

button = tkinter. Button{frame, text='Click', command=click) button. pack ().

# Вид: в реальном времени обновляется содержимое.

# виджета Label.

label = tkinter. Label (frame, textvariable=counter) label. pack () window. mainloop ().

Результат выполнения программы показан на рис. 4.53.

Обработка события при нажатии на кнопку.

Рис. 4.53. Обработка события при нажатии на кнопку

Далее представлен более сложный пример с двумя кнопками и двумя обработчиками событий (clickup, click_down):

# mytk8. py import tkinter window = tkinter. Tk{).

# Модель:

counter = tkinter. IntVar () counter. set (0).

# Два контроллера: def click_up{):

counter.set (counter.get () + 1) def click_down ():

counter.set (counter.get () — 1).

# Вид:

frame = tkinter. Frame (window) frame. pack ().

button = tkinter. Button (frame, text='Up', command=c1ick_up) button. pack ().

button = tkinter. Button{frame, text='Down', c ommand=с1i ck_down) button. pack ().

label = tkinter. Label (frame, textvariable=counter) label. pack () window. mainloop ().

Результат работы программы показан на рис. 4.54.

Пример с двумя кнопками и двумя обработчиками событий.

Рис. 4.54. Пример с двумя кнопками и двумя обработчиками событий.

Показать весь текст
Заполнить форму текущей работой