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

  • Примерный ответ к практической работе 1. from tkinter import *2. root = Tk() 3. 4. def

  • Диалоговые окна в Tkinter. Урок 11 Методическая разработка урока

  • Геометрические примитивы графического элемента Canvas (холст) модуля Tkinter. Урок 12 Методическая разработка урока

  • Практическая работа Запрограммируйте следующие изображения на виджетах-холстах: Canvas (холст): методы, идентификаторы и теги. Урок 13 Методическая разработка урока

  • Элективный курс: Модуль tkinter. Создание графического интерфейса

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


    Скачать 0.83 Mb.
    НазваниеПрограммирования Pythonпояснительная записка
    Дата09.02.2022
    Размер0.83 Mb.
    Формат файлаpdf
    Имя файлаModul_tkinter.pdf
    ТипМетодическая разработка
    #356513
    страница3 из 4
    1   2   3   4
    def
    new_win():
    2. win = Toplevel(root)
    3.
    4.
    def
    close_win():
    5. root.destroy()
    6.
    7.
    def
    about():
    8. win = Toplevel(root)
    9. lab = Label(win,text=
    "Это просто программа-тест
    \n
    меню в Tkinter"
    )
    10. lab.pack()
    11.
    12. ….
    13. fm
    .add_command(label=
    "New"
    ,command=new_win)
    14. ….
    15. fm
    .add_command(label=
    "Exit"
    ,command=close_win)
    16.
    17. ….
    18. hm.add_command(label=
    "About"
    ,command=about)

    Практическая работа
    Напишите приложение с меню, содержащим два пункта: Color и Size. Пункт Color должен содержать три команды (Red, Green и Blue), меняющие цвет рамки на главном окне. Пункт Size должен содержать две команды (500x500 и 700х400), изменяющие размер рамки.
    Примерный ответ к практической работе
    1.
    from
    tkinter
    import
    *
    2. root = Tk()
    3.
    4.
    def
    colorR():
    5. fra.config(bg=
    "Red"
    )
    6.
    def
    colorG():
    7. fra.config(bg=
    "Green"
    )
    8.
    def
    colorB():
    9. fra.config(bg=
    "Blue"
    )
    10.
    11.
    def
    square():
    12. fra.config(width=500)
    13. fra.config(height=500)
    14.
    def
    rectangle():
    15. fra.config(width=
    700
    )
    16. fra.config(height=
    400
    )
    17.
    18. fra = Frame(root,width=
    300
    ,height=
    100
    ,bg=
    "Black"
    )
    19. fra.pack()
    20.
    21. m = Menu(root)
    22. root.config(menu=m)
    23.
    24. cm = Menu(m)
    25. m.add_cascade(label=
    "Color"
    ,menu=cm)
    26. cm.add_command(label=
    "Red"
    ,command=colorR)
    27. cm.add_command(label=
    "Green"
    ,command=colorG)
    28. cm.add_command(label=
    "Blue"
    ,command=colorB)
    29.
    30. sm = Menu(m)
    31. m.add_cascade(label=
    "Size"
    ,menu=sm)
    32. sm.add_command(label=
    "500x500"
    ,command=square)
    33. sm.add_command(label=
    "700x400"
    ,command=rectangle)
    34.
    35. root.mainloop()

    Диалоговые окна в Tkinter. Урок 11
    Методическая разработка урока
    Элективный курс: Модуль tkinter. Создание графического интерфейса
    пользователя с помощью языка программирования Python
    Уровень: Программирование для начинающих
    Версии Python: 3.*
    Диалоговые окна, как элементы графического интерфейса, предназначены для вывода сообщений пользователю, получения от него какой- либо информации, а также управления.
    Диалоговые окна весьма разнообразны. В данном уроке будут рассмотрены лишь несколько.
    Рассмотрим, как запрограммировать с помощью Tkinter вызов диалоговых окон открытия и сохранения файлов и работу с ними. При этом требуется дополнительно импортировать "подмодуль" Tkinter - tkinter.filedialog, в котором описаны классы для окон данного типа.
    1.
    from
    tkinter
    import
    *
    2.
    from
    tkinter.filedialog
    import
    *
    3.
    4. root = Tk()
    5. op = askopenfilename()
    6. sa = asksaveasfilename()
    7.
    8. root.mainloop()
    Здесь создаются два объекта (op и sa): один вызывает диалоговое окно "Открыть", а другой "Сохранить как...". При выполнении скрипта, они друг за другом выводятся на экран после появления главного окна. Если не создать root, то оно все-равно появится на экране, однако при попытке его закрытия в конце возникнет ошибка.
    Давайте теперь разместим многострочное текстовое поле на главном окне и в дальнейшем попробуем туда загружать содержимое небольших текстовых файлов. Поскольку окно сохранения файла нам пока не нужно, то закомментируем эту строчку кода или удалим. В результате должно получиться примерно так:
    1.
    from
    tkinter
    import
    *
    2.
    from
    tkinter.filedialog
    import
    *

    3.
    4. root = Tk()
    5. txt = Text(root,width=
    40
    ,height=
    15
    ,font=
    "12"
    )
    6. txt.pack()
    7.
    8. op = askopenfilename()
    9.
    10. root.mainloop()
    При запуске скрипта появляется окно с текстовым полем и сразу диалоговое окно "Открыть". Однако, если мы попытаемся открыть какой- нибудь текстовый файл, то в лучшем случае ничего не произойдет. Как же связать содержимое текстового файла с текстовым полем через диалог "Открыть"?
    Что если просто вставить содержимое переменной op в текстовое поле:
    1. txt.insert(END,op)
    После запуска скрипта и попытки открытия файла в текстовом поле оказывается адрес файла. Значит содержимое файла надо прочитать каким-то методом (функцией).
    Метод input модуля fileinput может принимать в качестве аргумента адрес файла, читать его содержимое, формируя список строк. Далее с помощью цикла for можно извлекать строки последовательно и помещать их, например, в текстовое поле.
    1.
    2.
    import
    fileinput
    3.
    4.
    for
    i
    in
    fileinput input
    (op):
    5. txt.insert(END,i)
    6.
    Обратите внимание на то, как происходит обращение к функции input модуля fileinput и его импорт. Дело в том, что в Python уже встроена своя функция input (ее назначение абсолютно иное) и во избежание "конфликта" требуется четко указать, какую именно функцию мы имеем ввиду. Поэтому вариант импорта 'from fileinput import input' здесь не подходит.
    Окно "Открыть" запускается сразу при выполнении скрипта. На самом деле так не должно быть. Необходимо связать запуск окна с каким- нибудь событием. Пусть это будет щелчок на пункте меню.
    1.
    from
    tkinter
    import
    *
    2.
    from
    tkinter.filedialog
    import
    *
    3.
    import
    fileinput
    4.
    5.
    def
    _open():
    6. op = askopenfilename()

    7.
    for
    l
    in
    fileinput input
    (op):
    8. txt.insert(END,l)
    9.
    10. root = Tk()
    11.
    12. m = Menu(root)
    13. root.config(menu=m)
    14.
    15. fm
    = Menu(m)
    16. m.add_cascade(label=
    "File"
    ,menu=
    fm
    )
    17. fm
    .add_command(label=
    "Open..."
    ,command=_open)
    18.
    19. txt = Text(root,width=
    40
    ,height=
    15
    ,font=
    "12"
    )
    20. txt.pack()
    21.
    22. root.mainloop()
    Теперь попробуем сохранять текст, набранный в текстовом поле. Добавим в код пункт меню и следующую функцию:
    1.
    def
    _save():
    2. sa = asksaveasfilename()
    3. letter = txt.get(1.0,END)
    4. f = open
    (sa,
    "w"
    )
    5. f.write(letter)
    6. f.close()
    В переменной sa храниться адрес файла, куда будет производиться запись. В переменной letter – текст, "полученный" из текстового поля.
    Затем файл открывается для записи, в него записывается содержимое переменной letter, и файл закрывается (на всякий случай).
    Еще одна группа диалоговых окон описана в модуле tkinter.messagebox. Это достаточно простые диалоговые окна для вывода сообщений, предупреждений, получения от пользователя ответа "да" или "нет" и т. п.
    Дополним нашу программу пунктом Exit в подменю File и пунктом About program в подменю Help.
    1.
    from
    tkinter.messagebox
    import
    *
    2.
    ….
    3.
    def
    close_win():
    4.
    if
    askyesno(
    "Exit"
    ,
    "Do you want to quit?"
    ):
    5. root.destroy()
    6.
    7.
    def
    about():
    8. showinfo(
    "Editor"
    ,
    "This is text editor.
    \n
    (test version)"
    )
    9.
    10. fm
    .add_command(label=
    "Exit"
    ,command=close_win)
    11. ....

    12. hm = Menu(m)
    13. m.add_cascade(label=
    "Help"
    ,menu=hm)
    14. hm.add_command(label=
    "About"
    ,command=about)
    15. ...
    В функции about происходит вызов окна showinfo, позволяющее выводить сообщение для пользователя с кнопкой OK. Первый аргумент — это то, что выведется в заголовке окна, а второй — то, что будет содержаться в теле сообщения. В функции close_win вызывается окно askyesno, которое позволяет получить от пользователя два ответа (true и false). В данном случае при положительном ответе сработает ветка if и главное окно будет закрыто. В случае нажатия пользователем кнопки "No" окно просто закроется (хотя можно было запрограммировать в ветке else какое-либо действие).
    Практическая работа
    1. Напишите программу, описанную в уроке.
    2. Измените программу: пусть после нажатия пункта Exit пользователю выводилось не окно с вопросом "выйти или нет", а окно с вопросом "сохранить или нет". В случае положительного ответа должна вызываться функция _save и только затем завершаться приложение.
    3. Если в текстовом поле что-то содержится, то при открытии файла оно не удаляется, а содержимое файла просто дописывается. Исправьте этот недостаток (перед открытием файла содержимое текстового поля должно удаляться).
    Геометрические примитивы графического элемента Canvas (холст) модуля Tkinter.
    Урок 12
    Методическая разработка урока
    Элективный курс: Модуль tkinter. Создание графического интерфейса
    пользователя с помощью языка программирования Python
    Уровень: Программирование для начинающих
    Canvas (холст) — это достаточно сложный объект библиотеки tkinter. Он позволяет располагать на самом себе другие объекты. Это могут быть как геометрические фигуры, узоры, вставленные изображения, так и другие виджеты (например, метки, кнопки, текстовые поля). И это еще не все. Отображенные на холсте объекты можно изменять и перемещать (при желании) в процессе выполнения скрипта. Учитывая все
    это, canvas находит широкое применение при создании GUI-приложений c использованием tkinter (создание рисунков, оформление других виджет, реализация функций графических редакторов, программируемая анимация и др.).
    В данном уроке будет рассмотрено создание на холсте графических примитивов (линии, прямоугольника, многоугольника, дуги (сектора), эллипса) и текста.
    Для того, чтобы создать объект-холст необходимо вызвать соответствующий класс модуля tkinter и установить некоторые значения свойств
    (опций). Например:
    1. canv = Canvas(root,width=
    500
    ,height=
    500
    ,bg=
    "lightblue"
    ,
    2. cursor=
    "pencil"
    )
    Далее с помощью любого менеджера геометрии разместить на главном окне.
    Перед тем как создавать геометрические фигуры на холсте следует разобраться с координатами и единицами измерения расстояния. Нулевая точка (0,0) для объекта Canvas располагается в верхнем левом углу. Единицы измерения пиксели (точки экрана). Для «ориентации в пространстве» объекта Canvas рассмотрите рисунок ниже. У любой точки первое число — это расстояние от нулевого значения по оси X, второе — по оси Y.
    Чтобы нарисовать линию на холсте следует к объекту (в нашем случае, canv) применить метод create_line.

    1. canv.create_line(
    200
    ,
    50
    ,
    300
    ,
    50
    ,width=
    3
    ,fill=
    "blue"
    )
    2. canv.create_line(
    0
    ,
    0
    ,
    100
    ,
    100
    ,width=
    2
    ,arrow=LAST)
    Четыре числа — это пары координат начала и конца линии, т.е в примере первая линия начинается из точки (200,50), а заканчивается в точке
    (300,50). Вторая линия начинается в точке (0,0), заканчивается — в (100,100). Свойство fill позволяет задать цвет линии отличный от черного, а arrow – установить стрелку (в конце, начале или по обоим концам линии).
    Метод create_rectangle создает прямоугольник. Аналогично линии в скобках первыми аргументами прописываются четыре числа. Первые две координаты обозначают верхний левый угол прямоугольника, вторые — правый нижний. В примере ниже используется немного иной подход. Он может быть полезен, если начальные координаты объекта могут изменяться, а его размер строго регламентирован.
    1. x =
    75 2. y =
    110 3. canv.create_rectangle(x,y,x+
    80
    ,y+
    50
    ,fill=
    "white"
    ,outline=
    "blue"
    )
    Опция outline определяет цвет границы прямоугольника.
    Чтобы создать произвольный многоугольник, требуется задать пары координат для каждой его точки.
    1. canv.create_polygon([
    250
    ,
    100
    ],[
    200
    ,
    150
    ],[
    300
    ,
    150
    ],fill=
    "yellow"
    )
    Квадратные скобки при задании координат используются для удобочитаемости (их можно не использовать). Свойство smooth задает сглаживание.
    1. canv.create_polygon([
    250
    ,
    100
    ],[
    200
    ,
    150
    ],[
    300
    ,
    150
    ],fill=
    "yellow"
    )
    2. canv.create_polygon([
    300
    ,
    80
    ],[
    400
    ,
    80
    ],[
    450
    ,
    75
    ],[
    450
    ,
    200
    ],
    3.
    [
    300
    ,
    180
    ],[
    330
    ,
    160
    ],outline=
    "white"
    ,smooth=
    1
    )
    При создании эллипса задаются координаты гипотетического прямоугольника, описывающего данный эллипс.
    1. canv.create_oval([
    20
    ,
    200
    ],[
    150
    ,
    300
    ],fill=
    "gray50"
    )
    Более сложные для понимания фигуры получаются при использовании метода create_arc. В зависимости от значения опции style можно получить сектор (по умолчанию), сегмент (CHORD) или дугу (ARC). Координаты по-прежнему задают прямоугольник, в который вписана окружность, из которой «вырезают» сектор, сегмент или дугу. От опций start и extent зависит угол фигуры.
    1. canv.create_arc([
    160
    ,
    230
    ],[
    230
    ,
    330
    ],start=
    0
    ,extent=
    140
    ,fill=
    "lightgreen"
    )
    2. canv.create_arc([
    250
    ,
    230
    ],[
    320
    ,
    330
    ],start=
    0
    ,extent=
    140
    ,
    3. style=CHORD,fill=
    "green"
    )
    4. canv.create_arc([
    340
    ,
    230
    ],[
    410
    ,
    330
    ],start=
    0
    ,extent=
    140
    ,
    5. style=ARC,outline=
    "darkgreen"
    ,width=
    2
    )

    Последний метод объекта canvas, который будет рассмотрен в этом уроке — это метод создающий текстовую надпись.
    1. canv.create_text(
    20
    ,
    330
    ,text=
    "Опыты с графическими примитивами
    \n
    на холсте"
    ,
    2. font=
    "Verdana 12"
    ,anchor=
    "w"
    ,justify=CENTER,fill=
    "red"
    )
    Трудность здесь может возникнуть с пониманием опции anchor (якорь). По умолчанию в заданной координате располагается центр текстовой надписи. Чтобы изменить это и, например, разместить по указанной координате левую границу текста, используется якорь со значением w (от англ. west – запад). Другие значения: n, ne, e, se, s, sw, w, nw. Если букв, задающих сторону привязки две, то вторая определяет вертикальную привязку (вверх или вниз «уйдет» текст от координаты). Свойство justify определяет лишь выравнивание текста относительно себя самого.
    В конце следует отметить, что часто требуется «нарисовать» на холсте какие-либо повторяющиеся элементы. Для того, чтобы не загружать код, используют циклы. Например, так:
    1. x=10 2.
    while
    x
    <
    450
    :
    3. canv.create_rectangle(x,
    400
    ,x+
    50
    ,
    450
    )
    4. x = x +
    60
    Если вы напишите код приведенный в данном уроке (предварительно совершив импорт модуля Tkinter и создание главного окна, а также не забыв расположить на окне холст, и в конце «сделать» mainloop), то при его выполнении увидите такую картину:

    Практическая работа
    Запрограммируйте следующие изображения на виджетах-холстах:
    Canvas (холст): методы, идентификаторы и теги. Урок 13
    Методическая разработка урока
    Элективный курс: Модуль tkinter. Создание графического интерфейса
    пользователя с помощью языка программирования Python
    Уровень: Программирование для начинающих
    На прошлом уроке были рассмотрены методы объекта canvas, формирующие на нем геометрические примитивы и текст. Однако это лишь часть методов холста. В другую условную группу можно выделить методы, изменяющие свойства уже существующих объектов холста
    (например, геометрических фигур). И тут возникает вопрос: как обращаться к уже созданным фигурам? Ведь если при создании было прописано что-то вроде canvas.create_oval(30,10,130,80) и таких овалов, квадратов и др. на холсте очень много, то как к ним обращаться?
    Для решения этой проблемы в tkinter для объектов холста можно использовать идентификаторы и теги, которые затем передаются другим методам. У любого объекта может быть как идентификатор, так и тег. Использование идентификаторов и тегов немного различается.

    Рассмотрим несколько методов изменения уже существующих объектов с использованием при этом идентификаторов. Для начала создадим холст и три объекта на нем. При создании объекты "возвращают" свои идентификаторы, которые можно связать с переменными
    (oval, rect и trial в примере ниже) и потом использовать их для обращения к конкретному объекту.
    1. c = Canvas(width=
    460
    ,height=
    460
    ,bg=
    'grey80'
    )
    2. c.pack()
    3. oval = c.create_oval(
    30
    ,
    10
    ,
    130
    ,
    80
    )
    4. rect = c.create_rectangle(
    180
    ,
    10
    ,
    280
    ,
    80
    )
    5. trian = c.create_polygon(
    330
    ,
    80
    ,
    380
    ,
    10
    ,
    430
    ,
    80
    , fill=
    'grey80'
    , outline=
    "black"
    )
    Если вы выполните данный скрипт, то увидите на холсте три фигуры: овал, прямоугольник и треугольник.
    Далее можно использовать методы-"модификаторы" указывая в качестве первого аргумента идентификатор объекта. Метод move перемещает объект на по оси X и Y на расстояние указанное в качестве второго и третьего аргументов. Следует понимать, что это не координаты, а смещение, т. е. в примере ниже прямоугольник опустится вниз на 150 пикселей. Метод itemconfig изменяет указанные свойства объектов, coords изменяет координаты (им можно менять и размер объекта).
    1. c.move(rect,
    0
    ,
    150
    )
    2. c.itemconfig(trian,outline=
    "red"
    ,width=
    3
    )
    3. c.coords(oval,
    300
    ,
    200
    ,
    450
    ,
    450
    )
    Если запустить скрипт, содержащий две приведенные части кода (друг за другом), то мы сразу увидим уже изменившуюся картину на холсте: прямоугольник опустится, треугольник приобретет красный контур, а эллипс сместится и сильно увеличится в размерах. Обычно в программах изменения должны наступать при каком-нибудь внешнем воздействии. Пусть по щелчку левой кнопкой мыши прямоугольник передвигается на два пикселя вниз (он будет это делать при каждом щелчке мышью):
    1.
    1   2   3   4


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