Главная страница
Навигация по странице:

  • Метод bind модуля Tkinter. Урок 7 Методическая разработка урока

  • Пример 1. 1. def output(event): 2. s = ent.get() 3. if

  • Пример 2. 1. li = ["red","green"] 2. def color(event): 3. fra.configure(bg=li[0]) 4. li[0],li[1] = li[1],li[0] 5. 6. def

  • Программирование событий в Tkinter. Урок 8 Методическая разработка урока

  • События, производимые мышью

  • Пример: 1. from tkinter import *2. def b1(event): 3. root.title("Левая кнопка мыши") 4. def

  • События, производимые с помощью клавиатуры

  • Переменные Tkinter. Урок 9 Методическая разработка урока

  • Объект Меню (Menu) в GUI. Урок 10 Методическая разработка урока

  • Привязка функций к меню

  • Программирования Pythonпояснительная записка


    Скачать 0.83 Mb.
    НазваниеПрограммирования Pythonпояснительная записка
    Дата09.02.2022
    Размер0.83 Mb.
    Формат файлаpdf
    Имя файлаModul_tkinter.pdf
    ТипМетодическая разработка
    #356513
    страница2 из 4
    1   2   3   4
    практическая работа
    1. Создайте два скрипта на языке программирования Python и с использованием модуля Tkinter генерирующие шаблоны представленные ниже.
    2. Создайте приложение, состоящее из главного и двух дочерних окон. На каждом из трех окон должны располагаться один или два любых графических объекта.

    Метод bind модуля Tkinter. Урок 7
    Методическая разработка урока
    Элективный курс: Модуль tkinter. Создание графического интерфейса
    пользователя с помощью языка программирования Python
    Уровень: Программирование для начинающих
    Приложения с графическим интерфейсом пользователя (GUI) должны не просто красиво отображаться на экране, но и выполнять какие-либо действия, реализуя тем самым потребности пользователя. На прошлых уроках было рассказано как создать GUI, на этом уроке рассмотрим как добавить ему функциональность, т.е возможность совершать с его помощью те или иные действия.
    В отличие от консольных приложений, которые обычно выполняются при минимальных внешних воздействиях, графическое приложение обычно ждет каких-либо внешних воздействий (щелчков кнопкой мыши, нажатий клавиш на клавиатуре, изменения виджетов) и затем выполняет заложенное программистом действие. Из такого принципа работы можно вывести следующую схему настройки функциональности GUI: на виджет что-то «влияет» из вне → выполняется какая-то функция (действие). Внешнее воздействие на графический компонент называется событием. Событий достаточно много (основной их перечень мы рассмотрим на следующем занятии).
    На этом занятии будем использовать лишь два вида событий: щелчок левой кнопкой мыши () и нажатие клавиши Enter ().
    Одним из способов связывания виджета, события и функции (того, что должно происходить после события) является использование метода bind. Синтаксис связывания представлен на рисунке ниже.

    Рассмотрим различные примеры добавления функциональности GUI.
    Пример 1.
    1.
    def
    output(event):
    2. s = ent.get()
    3.
    if
    s ==
    "1"
    :
    4. tex.delete(
    1.0
    ,END)
    5. tex.insert(END,
    "Обслуживание клиентов на втором этаже"
    )
    6.
    elif
    s ==
    "2"
    :
    7. tex.delete(
    1.0
    ,END)
    8. tex.insert(END,
    "Пластиковые карты выдают в соседнем здании"
    )
    9.
    else
    :
    10. tex.delete(
    1.0
    ,END)
    11. tex.insert(END,
    "Введите 1 или 2 в поле слева"
    )
    12.
    13.
    from
    tkinter
    import
    *
    14. root = Tk()
    15.
    16. ent = Entry(root,width=
    1
    )
    17. but = Button(root,text=
    "Вывести"
    )
    18. tex = Text(root,width=
    20
    ,height=
    3
    ,font=
    "12"
    ,wrap=WORD)
    19.
    20. ent.grid(row=
    0
    ,column=
    0
    ,padx=
    20
    )
    21. but.grid(row=
    0
    ,column=
    1
    )
    22. tex.grid(row=
    0
    ,column=
    2
    ,padx=
    20
    ,pady=
    10
    )
    23.

    24. but.bind(
    ""
    ,output)
    25.
    26. root.mainloop()
    Рассмотрим код, начиная с 16-й строки.
    В строках 16-18 создаются три виджета: однострочное текстовое поле, кнопка и многострочное текстовое поле. В первое поле пользователь должен что-то ввести, затем нажать кнопку и получить ответ во втором поле.
    В строках 20-22 используется менеджер grid для размещения виджетов. Свойства padx и pady определяют количество пикселей от виджета до края рамки (или ячейки) по осям x и y соответственно.
    В стоке 24 как раз и происходит связывание кнопки с событием нажатия левой кнопки мыши и функцией output. Все эти три компонента
    (виджет, событие и функция) связываются с помощью метода bind. В данном случае, при нажатии левой кнопкой мыши по кнопке but будет вызвана функция output.
    Итак, если вдруг пользователь щелкнет левой кнопкой мыши по кнопке, то выполнится функция output (ни в каком другом случае она выполняться не будет). Данная функция (строки 1-11) выводит информацию во второе текстовое поле. Какую именно информацию, зависит от того, что пользователь ввел в первое текстовое поле. В качестве аргумента функции передается событие (в данном случае ).
    Внутри веток if-elif-else используются методы delete и insert. Первый из них удаляет символы из текстового поля, второй — вставляет. 1.0 — обозначает первую строку, первый символ (нумерация символов начинается с нуля).
    Пример 2.
    1. li = [
    "red"
    ,
    "green"
    ]
    2.
    def
    color(event):
    3. fra.configure(bg=li[0])
    4. li[0],li[1] = li[1],li[0]
    5.
    6.
    def
    outgo(event):
    7. root.destroy()
    8.
    9.
    from
    tkinter
    import
    *
    10. root = Tk()
    11.
    12. fra = Frame(root,width=
    100
    ,height=
    100
    )
    13. but = Button(root,text=
    "Выход"
    )
    14.
    15. fra.pack()
    16. but.pack()
    17.
    18. root.bind(
    ""
    ,color)

    19. but.bind(
    ""
    ,outgo)
    20.
    21. root.mainloop()
    Здесь создаются два виджета (строки 12, 13): фрейм и кнопка.
    Приложение реагирует на два события: нажатие клавиши Enter в пределах главного окна (строка 18) и нажатие левой кнопкой мыши по кнопке but (строка 19). В первом случае вызывается функция color, во втором — outgo.
    Функция color изменяет цвет фона (bg) фрейма (fra) с помощью метода configure, который предназначен для изменения значения свойств виджетов в процессе выполнения скрипта. В качестве значения опции bg подставляется первый элемент списка. Затем в списке два элемента меняются местами, чтобы при следующем нажатии Enter цвет фрейма снова изменился.
    В функции outgo вызывается метод destroy по отношению к главному окну. Данный метод предназначен для «разрушения» виджета (окно закроется).
    практическая работа
    1. Создайте приложение, в котором меняется размер фрейма в зависимости от того, какая из трех объектов-кнопок была нажата.
    2. Напишите скрипт, генерирующий окно с меткой и текстовым полем. После ввода пользователем текста в поле и нажатия Enter, введенный текст должен отображаться в метке.
    Программирование событий в Tkinter. Урок 8
    Методическая разработка урока
    Элективный курс: Модуль tkinter. Создание графического интерфейса
    пользователя с помощью языка программирования Python
    Уровень: Программирование для начинающих
    Обычно, чтобы графическое приложение что-то сделало, должно случиться какое-нибудь событие, т. е. воздействие на GUI из вне.
    Типы событий

    Можно выделить три основных типа событий: производимые мышью, нажатиями клавиш на клавиатуре, а также события, возникающие в результате изменения других графических объектов.
    Способ записи
    При вызове метода bind событие передается в качестве первого аргумента.
    Название события заключается в кавычки, а также в знаки < и >. Событие описывается с помощью зарезервированных последовательностей ключевых слов.

    События, производимые мышью

    - щелчок левой кнопкой мыши

    - щелчок средней кнопкой мыши

    - щелчок правой кнопкой мыши

    - двойной клик левой кнопкой мыши

    - движение мыши

    и т. д.
    Пример:
    1.
    from
    tkinter
    import
    *
    2.
    def
    b1(event):
    3. root.title(
    "Левая кнопка мыши"
    )
    4.
    def
    b3(event):
    5. root.title(
    "Правая кнопка мыши"
    )
    6.
    def
    move(event):
    7. root.title(
    "Движение мышью"
    )
    8.
    9. root = Tk()
    10. root.minsize(width =
    500
    , height=
    400
    )
    11.
    12. root.bind(
    ''
    ,b1)
    13. root.bind(
    ''
    ,b3)
    14. root.bind(
    ''
    ,move)
    15.
    16. root.mainloop()
    В этой программе меняется надпись в заголовке главного окна в зависимости от того двигается мышь, щелкают левой или правой кнопкой мыши.
    События, производимые с помощью клавиатуры

    Буквенные клавиши можно записывать без угловых скобок (например, 'L').

    Для неалфавитных клавиш существуют специальные зарезервированные слова
    * - нажатие клавиши Enter;
    * - пробел;
    * и т. д.

    Сочетания клавиш пишутся через тире. Например:
    * - одновременное нажатие клавиш Ctrl и Shift.

    1.
    from
    tkinter
    import
    *
    2.
    3.
    def
    exit_(event):
    4. root.destroy()
    5.
    def
    caption(event):
    6. t = ent.get()
    7. lbl.configure(text = t)
    8.
    9. root = Tk()
    10.
    11. ent = Entry(root, width =
    40
    )
    12. lbl = Label(root, width =
    80
    )
    13.
    14. ent.pack()
    15. lbl.pack()
    16.
    17. ent.bind(
    ''
    ,caption)
    18. root.bind(
    ''
    ,exit_)
    19.
    20. root.mainloop()
    При нажатии клавиши Enter в пределах текстовой строки (ent) вызывается функция caption, которая помещает символы из текстовой строки
    (ent) в метку (lbl). Нажатие комбинации клавиш Ctrl + z приводит к закрытию главного окна.
    практическая работа
    1. Напишите следующую программу. На главном окне находится несколько флажков и текстовое поле. При щелчке левой кнопкой мыши в пределах текстового поля в нем должны отображаться значения включенных флажки (появляться сообщение о том, какие флажки включены), при щелчке правой кнопкой мыши — значения выключенных флажков.
    2. Напишите скрипт, генерирующий в окне два текстовых поля и рамку. Размер рамки можно менять с помощью вводимых значений в текстовые поля (определяют длину и ширину) и нажатии клавиши пробел на клавиатуре.

    Переменные Tkinter. Урок 9
    Методическая разработка урока
    Элективный курс: Модуль tkinter. Создание графического интерфейса
    пользователя с помощью языка программирования Python
    Уровень: Программирование для начинающих
    Библиотека Tkinter содержит специальные классы, объекты которых выполняют роль переменных для хранения значений о состоянии различных виджет. Изменение значения такой переменной ведет к изменению и свойства виджета, и наоборот: изменение свойства виджета изменяет значение ассоциированной переменной.
    Существует несколько таких классов Tkinter, предназначенных для обработки данных разных типов.
    1. StringVar() - для строк;
    2. IntVar() - целых чисел;
    3. DoubleVar() - дробных чисел;
    4. BooleanVar() - для обработки булевых значений (true и false).
    Пример 1.
    Во втором уроке мы уже использовали переменную-объект типа IntVar() при создании группы радиокнопок:
    1. var=IntVar()
    2. var.
    set
    (
    1
    )
    3. rad0 = Radiobutton(root,text=
    "Первая"
    ,variable=var,value=
    0
    )
    4. rad1 = Radiobutton(root,text=
    "Вторая"
    ,variable=var,value=
    1
    )
    5. rad2 = Radiobutton(root,text=
    "Третья"
    ,variable=var,value=
    2
    )
    Здесь создается объект класса IntVar и связывается с переменной var. С помощью метода set устанавливается начальное значение, равное 1.
    Три радиокнопки относятся к одной группе: об этом свидетельствует одинаковое значение опции (свойства) variable. Variable предназначена для связывания переменной Tkinter с радиокнопкой. Опция value определяет значение, которое будет передано переменной, если данная кнопка будет в состоянии "включено". Если в процессе выполнения скрипта значение переменной var будет изменено, то это отразится на группе кнопок. Например, это делается во второй строчке кода: включена кнопка rad1.

    Если метод set позволяет устанавливать значения переменных, то метод get, наоборот, позволяет получать (узнавать) значения для последующего их использования.
    1.
    def
    display(event):
    2. v = var.get()
    3.
    if
    v == 0:
    4.
    print
    (
    "Включена первая кнопка"
    )
    5.
    elif
    v == 1:
    6.
    print
    (
    "Включена вторая кнопка"
    )
    7.
    elif
    v == 2:
    8.
    print
    (
    "Включена третья кнопка"
    )
    9.
    10. but = Button(root,text=
    "Получить значение"
    )
    11. but.bind(
    ''
    ,display)
    При вызове функции display в переменную v ―записывается― значение, связанное в текущий момент с переменной var. Чтобы получить значение переменной var, используется метод get (вторая строчка кода).
    Пример 2.
    Несколько сложнее обстоит дело с флажками. Поскольку состояния флажков независимы друг друга, то для каждого должна быть введена собственная ассоциированная переменная-объект.
    1.
    from
    tkinter
    import
    *
    2.
    3. root = Tk()
    4.
    5. var0=StringVar()
    # значение каждого флажка ...
    6. var1=StringVar()
    # ... хранится в собственной переменной
    7. var2=StringVar()
    8.
    # если флажок установлен, то в ассоциированную переменную ...
    9.
    # ...(var0,var1 или var2) заносится значение onvalue, ...
    10.
    # ...если флажок снят, то - offvalue.
    11. ch0 = Checkbutton(root,text=
    "Окружность"
    ,variable=var0,
    12. onvalue=
    "circle"
    ,offvalue=
    "-"
    )
    13. ch1 = Checkbutton(root,text=
    "Квадрат"
    ,variable=var1,
    14. onvalue=
    "square"
    ,offvalue=
    "-"
    )
    15. ch2 = Checkbutton(root,text=
    "Треугольник"
    ,variable=var2,
    16. onvalue=
    "triangle"
    ,offvalue=
    "-"
    )
    17.
    18. lis = Listbox(root,height=3)
    19.
    def
    result(event):
    20. v0 = var0.get()
    21. v1 = var1.get()
    22. v2 = var2.get()

    23. l = [v0,v1,v2]
    # значения переменных заносятся в список
    24. lis.delete(
    0
    ,
    2
    )
    # предыдущее содержимое удаляется из Listbox
    25.
    for
    v
    in
    l:
    # содержимое списка l последовательно ...
    26. lis.insert(END,v)
    # ...вставляется в Listbox
    27.
    28. but = Button(root,text=
    "Получить значения"
    )
    29. but.bind(
    ''
    ,result)
    30.
    31. ch0.deselect()
    # "по умолчанию" флажки сняты
    32. ch1.deselect()
    33. ch2.deselect()
    34.
    35. ch0.pack()
    36. ch1.pack()
    37. ch2.pack()
    38. but.pack()
    39. lis.pack()
    40.
    41. root.mainloop()
    Пример 3.
    Помимо свойства (опции) variable, связывающей виджет с переменной-объектом Tkinter (IntVar, StringVar и др.), у многих виджет существует опция textvariable, которая определяет текст-содержимое или текст-надпись виджета. Несмотря на то, что «текстовое свойство» может быть установлено для виджета и изменено в процессе выполнения кода без использования ассоциированных переменных, иногда такой способ изменения оказывается более удобным.
    1.
    from
    tkinter
    import
    *
    2. root = Tk()
    3. v = StringVar()
    4. ent1 = Entry (root, textvariable = v,bg=
    "black"
    ,fg=
    "white"
    )
    5. ent2 = Entry(root, textvariable = v)
    6. ent1.pack()
    7. ent2.pack()
    8. root.mainloop()
    Здесь содержимое одного текстового поля немедленно, отображается в другом, т.к. оба поля привязаны к одной и той же переменной v.
    Практическая работа
    1. Напишите скрипт, как в примере с флажками; в отличии от примера значения ассоциированных переменных должны отображаться в метке
    (Label) через запятую.

    2. Напишите программу, в которой пользователь может определить цвет рамки (Frame) c помощью шкалы (Scale).
    Объект Меню (Menu) в GUI. Урок 10
    Методическая разработка урока
    Элективный курс: Модуль tkinter. Создание графического интерфейса
    пользователя с помощью языка программирования Python
    Уровень: Программирование для начинающих
    Что такое меню
    Меню — это объект, который присутствует во многих пользовательских приложениях. Находится оно под строкой заголовка и представляет собой выпадающие списки под словами; каждый такой список может содержать другой вложенный в него список. Каждый пункт списка представляет собой команду, запускающую какое-либо действие или открывающую диалоговое окно.
    Создание меню в Tkinter
    1.
    from
    tkinter
    import
    *
    2. root = Tk()
    3.
    4. m = Menu(root)
    #создается объект Меню на главном окне
    5. root.config(menu=m)
    #окно конфигурируется с указанием меню для него
    6.
    7. fm
    = Menu(m)
    #создается пункт меню с размещением на основном меню (m)
    8. m.add_cascade(label=
    "File"
    ,menu=
    fm
    )
    #пункту располагается на основном меню (m)
    9. fm
    .add_command(label=
    "Open..."
    )
    #формируется список команд пункта меню
    10. fm
    .add_command(label=
    "New"
    )
    11. fm
    .add_command(label=
    "Save..."
    )
    12. fm
    .add_command(label=
    "Exit"
    )
    13.
    14. hm = Menu(m)
    #второй пункт меню
    15. m.add_cascade(label=
    "Help"
    ,menu=hm)
    16. hm.add_command(label=
    "Help"
    )
    17. hm.add_command(label=
    "About"
    )

    18.
    19. root.mainloop()
    Метод add_cascade добавляет новый пункт в меню, который указывается как значение опции menu.
    Метод add_command добавляет новую команду в пункт меню. Одна из опций данного метода (в примере выше ее пока нет) — command – связывает данную команду с функцией- обработчиком.
    Можно создать вложенное меню. Для этого создается еще одно меню и с помощью add_cascade привязать к родительскому пункту.
    1. nfm = Menu(
    fm
    )
    2. fm
    .add_cascade(label=
    "Import"
    ,menu=nfm)
    3. nfm.add_command(label=
    "Image"
    )
    4. nfm.add_command(label=
    "Text"
    )
    Привязка функций к меню
    Каждая команда меню обычно должна быть связана со своей функцией, выполняющей те или иные действия (выражения). Связь происходит с помощью опции command метода add_command. Функция обработчик до этого должна быть определена.
    Для примера выше далее приводятся исправленные строки добавления команд ―About‖, ―New‖ и ―Exit‖, а также функции, вызываемые, когда пользователь щелкает левой кнопкой мыши по соответствующим пунктам подменю.
    1.
    1   2   3   4


    написать администратору сайта