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

  • 1. импорт модуля tkinter

  • 4. установка свойств виджет

  • 5-6. определение событий и их обработчиков

  • 8. отображение главного окна

  • Tkinter

  • Tkinter Программирование

  • Sr.No. Оператор и описание

  • Многострочное текстовое поле

  • Frame (рамка) Как выяснится позже, рамки (фреймы) хороший инструмент для организации остальных виджет в группы внутри окна, а также оформления. 1. from

  • Scrollbar (полоса прокрутки)

  • практические работы по питону. МУ_ИНФОРМАТИКА_ПРОГРАММИРОВАНИЕ_ПИТОН Коренюгина_2021. Методические указания по подготовке к практическим занятиям, в том числе в интерактивной форме, и самостоятельному изучению дисциплины для школьников 911 классов общеобразовательных средних учебных заведений


    Скачать 2.38 Mb.
    НазваниеМетодические указания по подготовке к практическим занятиям, в том числе в интерактивной форме, и самостоятельному изучению дисциплины для школьников 911 классов общеобразовательных средних учебных заведений
    Анкорпрактические работы по питону
    Дата11.05.2023
    Размер2.38 Mb.
    Формат файлаpdf
    Имя файлаМУ_ИНФОРМАТИКА_ПРОГРАММИРОВАНИЕ_ПИТОН Коренюгина_2021.pdf
    ТипМетодические указания
    #1121129
    страница5 из 10
    1   2   3   4   5   6   7   8   9   10
    ЧАСТЬ 2 МОДУЛЬ ТКИНТЕР, Объектно-ориентированное программирование
    Порядок действий
    1. Импорт библиотеки
    2. Создание главного окна
    3. Создание виджет
    4. Установка их свойств
    5. Определение событий
    6. Определение обработчиков событий
    7. Расположение виджет на главном окне
    8. Отображение главного окна
    1. импорт модуля tkinter
    Как и любой модуль, tkinter в Python можно импортировать двумя способами: командами import tkinter или from tkinter import *. В дальнейшем мы будем пользоваться только вторым способом, т. к. это позволит не указывать каждый раз имя модуля при обращении к объектам, которые в нем содержатся. Следует обратить внимание, что в версии Python 3 имя модуля пишется со строчной буквы (tkinter), хотя в более ранних версиях использовалась прописная (Tkinter). Итак, первая строчка программы должна выглядеть так:
    1.
    from
    tkinter
    import
    *
    2. создание главного окна
    В современных операционных сисУРОКх любое пользовательское приложение заключено в окно, которое можно назвать главным, т.к. в нем располагаются все остальные виджеты. Объект окна верхнего уровня создается при обращении к классу Tk модуля tkinter. Переменную связанную с объектом-окном принято называть root (хотя понятно, что можно назвать как угодно, но так уж принято). Вторая строчка кода:
    1. root = Tk()
    3. создание виджет
    Допустим в окне будет располагаться всего одна кнопка. Кнопка создается при обращении к классу Button модуля tkinter. Объект кнопка связывается с какой-нибудь переменной. У класса Button (как и всех остальных классов, за исключением Tk) есть обязательный параметр — объект, которому кнопка принадлежит (кнопка не может "быть ничейной"). Пока у нас есть единственное окно (root), оно и будет аргументом, передаваемым в класс при создании объекта-кнопки:
    1. but = Button(root)
    4. установка свойств виджет
    У кнопки много свойств: размер, цвет фона и надписи и др. Пока установим всего одно свойство — текст надписи (text):

    79 1. but[
    "text"
    ] =
    "Печать"
    5-6. определение событий и их обработчиков
    Многообразие событий и способов их обработки будет рассмотрено на следующих уроках. Здесь же просто коснемся данного вопроса в связи с потребностью.
    Что же будет делать кнопка и в какой момент она это будет делать? Предположим, что задача кнопки вывести какое-нибудь сообщение в поток вывода, используя функцию print. Делать она это будет при нажатии на нее левой кнопкой мыши.
    Действия (алгоритм), которые происходят при том или ином событии, могут быть достаточно сложным. Поэтому часто их оформляют в виде функции, а затем вызывают, когда они понадобятся. Пусть у нас печать на экран будет оформлена в виде функции printer:
    1.
    def
    printer(event):
    2.
    print
    (
    "Как всегда очередной 'Hello World!'"
    )
    Не забывайте, что функцию желательно (почти обязательно) размещать в начале кода.
    Параметр event – это какое-либо событие.
    Событие нажатия левой кнопкой мыши выглядит так: . Требуется связать это событие с обработчиком (функцией printer). Для связи предназначен метод bind. Синтаксис связывания события с обработчиком выглядит так:
    1. but.bind(
    ""
    ,printer)
    7. размещение виджет
    Если вы заметите, то в любом приложении виджеты не разбросаны по окну как попало, а хорошо организованы, интерфейс продуман до мелочей и обычно подчинен определенным стандартам. До стандартов нам далеко, нужно просто кнопку как-то отобразить в окне. Самый простой способ — это использование метода pack.
    1. but.pack()
    Если не вставить эту строчку кода, то кнопка в окне так и не появится, хотя она есть в программе.
    8. отображение главного окна
    Ну и наконец, главное окно тоже не появится, пока не будет вызван специальный метод mainloop:
    1. root.mainloop()
    Данная строчка кода должна быть всегда в конце скрипта!
    В итоге, код программы может выглядеть таким образом:
    1.
    from
    tkinter
    import
    *
    2.
    3.
    def
    printer(event):__
    4.
    print
    (
    "Как всегда очередной 'Hello World!'"
    )
    5.
    6. root = Tk()
    7. but = Button(root)
    8. but[
    "text"
    ] =
    "Печать"
    9. but.bind(
    ""
    ,printer)
    10.
    11. but.pack()
    12. root.mainloop()
    При программировании графического интерфейса пользователя более эффективным оказывается объектно-ориентированный подход.
    Поэтому многие «вещи» оформляются в виде классов. В нашем примере также можно использовать класс:

    80 1.
    from
    tkinter
    import
    *
    2.
    3.
    class
    But_print:
    4.
    def
    __init__
    (
    self
    ):
    5. self
    .but = Button(root)
    6. self
    .but[
    "text"
    ] =
    "Печать"
    7. self
    .but.bind(
    ""
    ,
    self
    .printer)
    8. self
    .but.pack()
    9.
    def
    printer(
    self
    ,event):
    10.
    print
    (
    "Как всегда очередной 'Hello World!'"
    )
    11.
    12. root = Tk()
    13. obj = But_print()
    14. root.mainloop()
    Python - Программирование GUI (Tkinter)
    Python предоставляет различные варианты для разработки графических пользовательских интерфейсов (GUI). Наиболее важные из них перечислены ниже.

    Tkinter - Tkinter - это интерфейс Python для инструментария Tk GUI, поставляемый с Python. Мы бы посмотрели этот вариант в этой главе.

    wxPython - это интерфейс Python с открытым исходным кодом для wxWindows http://wxpython.org .

    JPython - JPython - это порт Python для Java, который предоставляет сценариям
    Python беспрепятственный доступ к библиотекам классов Java на локальной машине http://www.jython.org .
    Есть много других доступных интерфейсов, которые вы можете найти в сети.
    Tkinter Программирование
    Tkinter - это стандартная библиотека GUI для Python. Python в сочетании с Tkinter обеспечивает быстрый и простой способ создания приложений с графическим интерфейсом. Tkinter предоставляет мощный объектно-ориентированный интерфейс для инструментария Tk GUI.
    Создание приложения с графическим интерфейсом с помощью Tkinter - простая задача.
    Все, что вам нужно сделать, это выполнить следующие шаги -

    Импортируйте модуль Tkinter .

    Создать главное окно приложения с графическим интерфейсом.

    Добавьте один или несколько вышеупомянутых виджетов в приложение с графическим интерфейсом.

    Введите основной цикл событий, чтобы принять меры против каждого события, инициированного пользователем.
    пример
    #!/usr/bin/python import Tkinter top = Tkinter.Tk()
    # Code to add widgets will go here... top.mainloop()
    Это создаст следующее окно -

    81
    Ткинтер Виджеты
    Tkinter предоставляет различные элементы управления, такие как кнопки, метки и текстовые поля, используемые в приложении с графическим интерфейсом. Эти элементы управления обычно называются виджетами.
    В настоящее время в Tkinter существует 15 типов виджетов. Мы представляем эти виджеты, а также краткое описание в следующей таблице -
    Sr.No.
    Оператор и описание
    1 кнопка
    Виджет «Кнопка» используется для отображения кнопок в вашем приложении.
    2 холст
    Виджет Canvas используется для рисования фигур, таких как линии, овалы, многоугольники и прямоугольники, в вашем приложении.
    3
    Checkbutton
    Виджет Checkbutton используется для отображения ряда опций в виде флажков.
    Пользователь может выбрать несколько вариантов одновременно.
    4 запись
    Виджет «Запись» используется для отображения однострочного текстового поля для приема значений от пользователя.
    5
    Рамка
    Виджет Frame используется как контейнерный виджет для организации других виджетов.
    6 метка
    Виджет «Метка» используется для предоставления надписи в одну строку для других виджетов. Он также может содержать изображения.
    7
    Listbox
    Виджет «Список» используется для предоставления пользователю списка параметров.
    8 кнопку MENU
    Виджет Menubutton используется для отображения меню в вашем приложении.
    9
    Меню
    Виджет Меню используется для предоставления различных команд пользователю.
    Эти команды содержатся внутри Menubutton.
    10
    Сообщение
    Виджет Сообщение используется для отображения многострочных текстовых полей для принятия значений от пользователя.
    11
    Переключатель
    Виджет Radiobutton используется для отображения ряда параметров в качестве

    82 переключателей. Пользователь может выбрать только один вариант за один раз.
    12
    Масштаб
    Виджет Масштаб используется для предоставления виджета слайдера.
    13
    Полоса прокрутки
    Виджет полосы прокрутки используется для добавления возможности прокрутки к различным виджетам, таким как списки.
    14
    Текст
    Виджет Текст используется для отображения текста в несколько строк.
    15
    Высший уровень
    Виджет Toplevel используется для предоставления отдельного окна-контейнера.
    16 со счѐтчиком
    Виджет Spinbox - это вариант стандартного виджета Tkinter Entry, который можно использовать для выбора из фиксированного числа значений.
    17
    PanedWindow
    PanedWindow - это контейнерный виджет, который может содержать любое количество панелей, расположенных горизонтально или вертикально.
    18
    LabelFrame
    Метка - это простой контейнерный виджет. Его основная цель - выступать в качестве разделителя или контейнера для сложных оконных схем.
    19 tkMessageBox
    Этот модуль используется для отображения окон сообщений в ваших приложениях.
    Давайте изучим эти виджеты подробно -
    Стандартные атрибуты
    Давайте посмотрим, как определяются некоторые из их общих атрибутов, таких как размеры, цвета и шрифты.

    Габаритные размеры

    Цвета

    шрифты

    Якоря

    Рельефные стили

    Bitmaps

    курсоры
    Давайте изучим их кратко -
    Управление геометрией
    Все виджеты Tkinter имеют доступ к определенным методам управления геометрией, целью которых является организация виджетов по всей родительской области виджетов.
    Tkinter предоставляет следующие классы менеджера геометрии: pack, grid и place.

    Метод pack ()
    - этот менеджер геометрии организует виджеты в блоки перед размещением их в родительском виджете.

    Метод grid ()
    - этот менеджер геометрии организует виджеты в виде таблицы в родительском виджете.

    Метод place ()
    - этот менеджер геометрии организует виджеты, размещая их в определенной позиции в родительском виджете.
    Давайте кратко изучим методы управления геометрией -
    Практическая работа:
    1. Импортируйте модуль tkinter, создайте объект главного окна, примените к нему метод mainloop. Затем выполните скрипт. Что вы видите?
    2. Добавьте кнопку на главное окно с помощью такой команды:

    83 but = Button(root, text="Печать")
    В данном случае, при создании кнопки, в класс сразу передается и значение свойства text.
    Это наиболее часто используемый способ установки свойств (по-сравнению с тем, который приводится в уроке: but["text"] =
    "Печать").
    3. Расположите виджету на главном окне с помощью метода pack. Запустите скрипт. Что вы видите? Нажмите левой кнопкой мыши на кнопку в окне. Что-нибудь происходит?
    4. Создайте какую-нибудь функцию и свяжите ее с событием нажатия кнопки.
    5. Снова запустите скрипт и нажмите кнопку. По идее, должно что-то произойти.
    Кнопки
    Объект-кнопка создается вызовом класса Button модуля tkinter. При этом обязательным аргументом является лишь родительский виджет
    (например, окно верхнего уровня). Другие свойства могут указываться при создании кнопки или задаваться (изменяться) позже. Синтаксис:
    переменная = Button (родит_виджет, *свойство=значение, … ….+)
    У кнопки много свойств, в примере ниже указаны лишь некоторые из них.
    1.
    from
    tkinter
    import
    *
    2.
    3. root = Tk()
    4.
    5. but = Button(root,
    6. text=
    "Это кнопка"
    ,
    #надпись на кнопке
    7. width=
    30
    ,height=
    5
    ,
    #ширина и высота
    8. bg=
    "white"
    ,fg=
    "blue"
    )
    #цвет фона и надписи
    9.
    10. but.pack()
    11. root.mainloop() bg и fg – это сокращения от background (фон) и foreground (передний план). Ширина и высота измеряются в знакоместах (количество символов).
    Метки
    Метки (или надписи) — это достаточно простые виджеты, содержащие строку (или несколько строк) текста и служащие в основном для информирования пользователя.
    1. lab = Label(root, text=
    "Это метка!
    \n
    Из двух строк."
    , font=
    "Arial 18"
    )
    однострочное текстовое поле
    Такое поле создается вызовом класса Entry модуля tkinter. В него пользователь может ввести только одну строку текста.
    1. ent = Entry(root,width=
    20
    ,bd=
    3
    ) bd – это сокращение от borderwidth (ширина границы).
    Многострочное текстовое поле
    Text предназначен для предоставления пользователю возможности ввода не одной строки текста, а существенно больше.
    1. tex = Text(root,width=
    40
    ,
    2. font=
    "Verdana 12"
    ,
    3. wrap=WORD)
    Последнее свойство (wrap) в зависимости от своего значения позволяет переносить текст, вводимый пользователем либо по символам, либо по словам, либо вообще не переносить, пока пользователь не нажмет Enter.

    84
    радиокнопки (переключатели)
    Объект-радиокнопка никогда не используется по одному. Их используют группами, при этом в одной группе может быть «включена» лишь одна кнопка.
    1. var=IntVar()
    2. var.
    set
    (
    1
    )
    3. rad0 = Radiobutton(root,text=
    "Первая"
    ,
    4. variable=var,value=
    0
    )
    5. rad1 = Radiobutton(root,text=
    "Вторая"
    ,
    6. variable=var,value=
    1
    )
    7. rad2 = Radiobutton(root,text=
    "Третья"
    ,
    8. variable=var,value=
    2
    )
    Одна группа определяет значение одной переменной, т. е. если в примере будет выбрана радиокнопка rad2, то значение переменной будет var будет 2. Изначально также требуется установить значение переменной (выражение var.set(1) задает значение переменной var равное 1).
    Флажки
    Объект checkbutton предназначен для выбора не взаимоисключающих пунктов в окне (в группе можно активировать один, два или более флажков или не один). В отличие от радиокнопок, значение каждого флажка привязывается к своей переменной, значение которой определяется опциями onvalue (включено) и offvalue (выключено) в описании флажка.
    1. c1 = IntVar()
    2. c2 = IntVar()
    3. che1 = Checkbutton(root,text=
    "Первый флажок"
    ,
    4. variable=c1,onvalue=
    1
    ,offvalue=
    0
    )
    5. che2 = Checkbutton(root,text=
    "Второй флажок"
    ,
    6. variable=c2,onvalue=
    2
    ,offvalue=
    0
    )
    Списки
    Вызов класса Listbox создает объект, в котором пользователь может выбрать один или несколько пунктов в зависимости от значения опции selectmode. В примере ниже значение SINGLE позволяет выбирать лишь один пункт из списка.
    1. r = [
    'Linux'
    ,
    'Python'
    ,
    'Tk'
    ,
    'Tkinter'
    ]
    2. lis = Listbox(root,selectmode=SINGLE,height=4)
    3.
    for
    i
    in
    r:
    4. lis.insert(END,i)
    Изначально список (Listbox) пуст. С помощью цикла for в него добавляются пункты из списка (тип данных) r. Добавление происходит с помощью специального метода класса Listbox — insert. Данный метод принимает два параметра: куда добавить и что добавить.
    Большинство методов различных виджет мы рассмотрим по ходу изучения данного курса.
    Практическая работа
    Создайте два скрипта на языке программирования Python и с использованием модуля
    Tkinter генерирующие шаблоны представленные ниже.__
    Это будут рамка (frame), шкала (scale), полоса прокрутки (scrollbar), окно верхнего уровня (toplevel).
    Frame (рамка)
    Как выяснится позже, рамки (фреймы) хороший инструмент для организации остальных виджет в группы внутри окна, а также оформления.
    1.
    from
    tkinter
    import
    *

    85 2.
    3. root = Tk()
    4.
    5. fra1 = Frame(root,width=
    500
    ,height=
    100
    ,bg=
    "darkred"
    )
    6. fra2 = Frame(root,width=
    300
    ,height=
    200
    ,bg=
    "green"
    ,bd=
    20
    )
    7. fra3 = Frame(root,width=
    500
    ,height=
    150
    ,bg=
    "darkblue"
    )
    8.
    9. fra1.pack()
    10. fra2.pack()
    11. fra3.pack()
    12.
    13. root.mainloop()
    Данный скрипт создает три фрейма разного размера. Свойство bd (сокращение от boderwidth) определяет расстояния от края рамки до заключенных в нее виджетов (если они есть).
    На фреймах также можно размещать виджеты как на основном окне (root). Здесь текстовое поле находится на рамке fra2.
    1. ent1 = Entry(fra2,width=
    20
    )
    2. ent1.pack()
    Scale (шкала)
    Назначение шкалы — это предоставление пользователю выбора какого-то значения из определенного диапазона. Внешне шкала представляет собой горизонтальную или вертикальную полосу с разметкой, по которой пользователь может передвигать движок, осуществляя тем самым выбор значения.
    1. sca1 = Scale(fra3,orient=HORIZONTAL,length=
    300
    ,
    2. from_=
    0
    ,to=
    100
    ,tickinterval=
    10
    ,resolution=
    5
    )
    3. sca2 = Scale(root,orient=VERTICAL,length=
    400
    ,
    4. from_=
    1
    ,to=
    2
    ,tickinterval=
    0.1
    ,resolution=
    0.1
    )
    Свойства:
    orient определяет направление шкалы;
    length – длина шкалы в пикселях;
    from_ и to – с какого значения шкала начинается и каким заканчивается (т. е. диапазон значений);
    tickinterval – интервал, через который отображаются метки для шкалы;
    resolution - минимальная длина отрезка, на которую пользователь может передвинуть движок.
    Scrollbar (полоса прокрутки)
    Данный виджет позволяет прокручивать содержимое другого виджета (например, текстового поля или списка). Прокрутка может быть как по горизонтали, так и по вертикали.
    1.
    1   2   3   4   5   6   7   8   9   10


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