GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Python 3
  • Скачать Python
  • IDE
  • Скачать PyCharm
  • Django
  • Tkinter
  • Книги

This view

  • Original page
  • New address

GeezerVison is showing python-scripts.com — Виджет флажка, шкалы с ползунком и списка в Tkinter

Виджет флажка, шкалы с ползунком и списка

В 3-ей части уроков по изучению Tkinter мы расскажем о базовых виджетах.

Содержание курса

  1. Создание окна по центру и кнопка выхода в Tkinter
  2. Разметка виджетов в Tkinter — pack, grid и place
  3. Виджеты Checkbutton, Label, Scale и Listbox в Tkinter
  4. Меню, подменю и панель инструментов в Tkinter
  5. Диалоговые окна в Tkinter
  6. Рисуем линии, прямоугольники, круг и текст в Tkinter
  7. Пишем игру змейка на Tkinter

Содержание статьи

  • Виджет Checkbutton — Флажок ВКЛ/ВЫКЛ
  • Виджет Label (ярлык) пример кода Tkinter
  • Виджет Scale — шкала с ползунком в Tkinter
  • Виджет Listbox — Список в Tkinter

В рамках урока мы будем работать с виджетами:

  • Checkbutton (флажок);
  • Label (ярлык);
  • Scale (шкала с ползунком);
  • Listbox (список).

Виджеты – это базовые блоки для создания графического интерфейса программы. За годы развития программирования некоторые из виджетов стали стандартными во всех языках и на всех платформах.

Например, это виджеты кнопок, флажки или полоса прокрутки. Некоторые из виджетов могут иметь другие названия. Например, классические флажки (check box) в Tkinter имеют название Checkbutton.

В Tkinter реализован небольшой набор виджетов, который покрывает базовые нужды программирования. Дополнительные виджеты могут быть созданы самостоятельно.

Виджет Checkbutton — Флажок ВКЛ/ВЫКЛ

Checkbutton – это виджет, который имеет два состояния: «включен» и «выключен». Состояние «включен» визуально символизируется соответствующей отметкой (Некоторые темы могут иметь разные визуальные отметки). Виджет используется для обозначения каких-либо логических свойств. Виджет Checkbutton имеет флажок с текстовым ярлыком.


checkbutton.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from tkinter import Tk, Frame, Checkbutton
from tkinter import BooleanVar, BOTH
 
 
class Example(Frame):
    def __init__(self):
        super().__init__()
        self.initUI()
 
    def initUI(self):
        self.master.title("Флажки")
        self.pack(fill=BOTH, expand=True)
        self.var = BooleanVar()
 
        cb = Checkbutton(self, text="Показать заголовок", variable=self.var, command=self.onClick)
        cb.select()
        cb.place(x=50, y=50)
 
    def onClick(self):
        if self.var.get():
            self.master.title("Флажки")
        else:
            self.master.title("")
 
 
def main():
    root = Tk()
    root.geometry("250x150+300+300")
    app = Example()
    root.mainloop()
 
 
if __name__ == '__main__':
    main()

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Python Форум Помощи

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Чат
Канал

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

Подписаться

В нашем примере мы поместили флажок в окно. Использование этого флажка позволяет скрыть или отобразить заголовок окна.

Python
1
self.var = BooleanVar()

Мы создали BooleanVar объект. Данные объекты позволяют хранить логические значения виджетов в Tkinter.

Python
1
cb = Checkbutton(self, text="Показать заголовок", variable=self.var, command=self.onClick)

Создается экземпляр Checkbutton. Объект, хранящий значение, соединяется с виджетом посредством параметра variable. Когда мы нажимаем на флажок, вызывается метод onClick(). Для этого также используется параметр command.

Python
1
cb.select()

Изначально, заголовок окна виден. Поэтому, мы делаем флажок включенным с помощью метода select().

Python
1
2
3
4
if self.var.get():
    self.master.title("Checkbutton")
else:
    self.master.title("")

Внутри метода onClick() мы отображаем или скрываем заголовок окна, основываясь на значении из переменной self.var.

Флажки в Tkinter checkbox

Виджет Label (ярлык) пример кода Tkinter

Виджет Label используется для того, чтобы отображать текст или изображения. С этим виджетом пользователи никак не могут взаимодействовать.

В данном примере используется дополнительный файл:

  • tatras.jpg

Сохраните изображение рядом с файлом label.py, код для которого предоставлен ниже.

label.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from PIL import Image, ImageTk
from tkinter import Tk
from tkinter.ttk import Frame, Label
import sys
 
 
class Example(Frame):
 
    def __init__(self):
        super().__init__()
        self.loadImage()
        self.initUI()
 
    def loadImage(self):
        try:
            self.img = Image.open("tatras.jpg")
        except IOError:
            print("Возникла ошибка во время открытия изображения!")
            sys.exit(1)
 
    def initUI(self):
        self.master.title("Ярлык")
        tatras = ImageTk.PhotoImage(self.img)
        label = Label(self, image=tatras)
 
        # Сохраняем ссылку на объект открытого изображения.
        label.image = tatras
 
        label.pack()
        self.pack()
 
    def setGeometry(self):
        w, h = self.img.size
        self.master.geometry(("%dx%d+300+300") % (w, h))
 
 
def main():
    root = Tk()
    ex = Example()
    ex.setGeometry()
    root.mainloop()
 
 
if __name__ == '__main__':
    main()

Наш пример показывает изображение в окне.

Виджет ярлыка в Tkinter

Python
1
from PIL import Image, ImageTk

По умолчанию, виджет Label может отображать ограниченное количество форматов изображений. Чтобы отобразить JPG изображение, необходимо использовать библиотеку PIL (Python Imaging Library модуль).

Python
1
2
self.img = Image.open("tatras.jpg")
tatras = ImageTk.PhotoImage(self.img)

Мы создаем изображение из файла изображения в текущей рабочей директории. После этого мы создаем фото изображение из изображения.

Python
1
label = Label(self, image=tatras)

Фотоизображению присваивается параметр image виджета ярлыка.

Python
1
label.image = tatras

Чтобы сборщик мусора не закрыл наше изображение, нам необходимо сохранить ссылку на него.

Python
1
2
w, h = self.img.size
self.parent.geometry(("%dx%d+300+300") % (w, h))

Мы устанавливаем размер окна таким образом, чтобы максимально точно подобрать его под размеры изображения.

Виджет Scale — шкала с ползунком в Tkinter

Scale – это виджет, который позволяет пользователю графически выбирать значение, перемещая определенный ползунок по ограниченной линии. В нашем примере выбранное значение ползунком будет отображено виджетом ярлыка в формате текста.

scale.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from tkinter import Tk, BOTH, IntVar, LEFT
from tkinter.ttk import Frame, Label, Scale, Style
 
class Example(Frame):
 
    def __init__(self):
        super().__init__()
        self.initUI()
 
    def initUI(self):
        self.master.title("Шкала с ползунком")
        self.style = Style()
        self.style.theme_use("default")
 
        self.pack(fill=BOTH, expand=1)
 
        scale = Scale(self, from_=0, to=100, command=self.onScale)
        scale.pack(side=LEFT, padx=15)
 
        self.var = IntVar()
        self.label = Label(self, text=0, textvariable=self.var)
        self.label.pack(side=LEFT)
 
    def onScale(self, val):
        v = int(float(val))
        self.var.set(v)
 
 
def main():
    root = Tk()
    ex = Example()
    root.geometry("250x100+300+300")
    root.mainloop()
 
 
if __name__ == '__main__':
    main()

В нашем скрипте присутствует два виджета: scale и label. Значение из виджета шкалы отображается в виджете ярлыка.

Python
1
2
scale = Scale(self, from_=0, to=100,
    command=self.onScale)

Мы создаем виджет Scale. Также мы указываем границы шкалы от 0 до 100. В Python слово from это зарезервированное ключевое слово, поэтому необходимо прописывать символ подчеркивание (_) после параметра. Когда мы двигаем ползунок по шкале, вызывается метод onScale().

Python
1
2
self.var = IntVar()
self.label = Label(self, text=0, textvariable=self.var)

Создается переменная для хранения целого значения из шкалы и виджет ярлыка. Значение из переменной val будет отображаться в ярлыке.

Python
1
2
3
def onScale(self, val):
    v = int(float(val))
    self.var.set(v)

Метод onScale() получает текущее выбранное значение из виджета шкалы как параметр. Значение сначала конвертируется в тип float (число с плавающей запятой), после чего конвертируется в тип integer (целое число). В результате, значение передается в self.var для хранения и отображается в яврлыке как текст.

шкала с ползунком в Tkinter

Виджет Listbox — Список в Tkinter

Виджет Listbox позволяет отображать список объектов. Он позволяет пользователю выбирать один или несколько элементов из списка.

listbox.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
from tkinter import Tk, BOTH, Listbox, StringVar, END
from tkinter.ttk import Frame, Label
 
 
class Example(Frame):
 
    def __init__(self):
        super().__init__()
        self.initUI()
 
    def initUI(self):
        self.master.title("Список в Tkinter")
        self.pack(fill=BOTH, expand=1)
 
        acts = [
            'Скарлетт Йоханссон', 'Рэйчел Вайс',
            'Натали Портман', 'Джессика Альба'
        ]
 
        lb = Listbox(self)
 
        for i in acts:
            lb.insert(END, i)
 
        lb.bind("<<ListboxSelect>>", self.onSelect)
 
        lb.pack(pady=15)
 
        self.var = StringVar()
        self.label = Label(self, text=0, textvariable=self.var)
        self.label.pack()
 
    def onSelect(self, val):
        sender = val.widget
        idx = sender.curselection()
        value = sender.get(idx)
 
        self.var.set(value)
 
 
def main():
    root = Tk()
    ex = Example()
    root.geometry("300x250+300+300")
    root.mainloop()
 
 
if __name__ == '__main__':
    main()

В нашем примере мы отображаем список актрис, используя Listbox. Выбранная актриса из списка отображается в виджете ярлыка как текст.

Python
1
2
3
4
acts = [
    'Скарлетт Йоханссон', 'Рэйчел Вайс',
    'Натали Портман', 'Джессика Альба'
]

Это весь список актрис, которые будут показаны в списке.

Python
1
2
3
lb = Listbox(self)
for i in acts:
    lb.insert(END, i)

Мы создаем экземпляр Listbox и добавляем в него все объекты из указанного выше списка.

Python
1
lb.bind("<<ListboxSelect>>", self.onSelect)

Когда мы выбираем на элемент из списка, генерируется событие <<ListboxSelect>>. Мы закрепляем метод onSelect() к этому событию.

Python
1
2
self.var = StringVar()
self.label = Label(self, text=0, textvariable=self.var)

Мы создаем ярлык и держатель его значения self.var. С помощью этого ярлыка мы будем отображать выбранный на текущий момент элемент из списка.

Python
1
sender = val.widget

Мы получаем отправителя события – это наш виджет списка.

Python
1
idx = sender.curselection()

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

Python
1
value = sender.get(idx)

Фактическое значение извлекается при помощи метода get(), который получает индекс элемента из списка.

Python
1
self.var.set(value)

В результате, текста ярлыка обновляется и отображается имя выбранной актрисы.

Список в Tkinter

В этой части обучения Tkinter мы рассказали о базовых виджетах и попробовали с ними взаимодействовать.

Vasile Buldumac

Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.

E-mail: [email protected]

Образование
Universitatea Tehnică a Moldovei (utm.md)

  • 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
  • 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.