Список задач Python Tkinter (пошаговая сборка)

В этом руководстве по Python Tkinter давайте обсудим список задач Python Tkinter . Шаг за шагом мы увидим, как создать список задач с помощью Python Tkinter.

  • О списке задач Tkinter в Python Tkinter
  • Особенности списка дел в Python Tkinter.
  • Объяснение кода для списка задач в Python Tkinter.
  • исходный код списка дел с объяснением с использованием Python Tkinter

О списке задач Tkinter в Python Tkinter

  • Python ToDo List — это нашзозданный файл, в котором содержится информация о предстоящих задачах или событиях.
  • Пользователям нужно удобное программное обеспечение, которое можно быстро использовать для создания быстрых заметок. И здесь используется список дел.
  • В этом руководстве мы создадим простое приложение списка дел с использованием Python Tkinter , которое поможет пользователям систематизировать свои короткие заметки, сообщения или задачи.
  • Если мы говорим об обычном приложении списка дел, то мы заметим текстовую область, в которой пользователь может ввести сообщение, кнопку, удерживающую

Особенности списка дел в Python Tkinter

В этом разделе мы обсудим функции, которые мы собираемся добавить в наше приложение to-do.

  1. Список : мы будем использовать Python Tkinter Listbox для отображения нескольких задач, расположенных друг за другом. А задачи можно выбирать при нажатии на нее.
  2. Полосы прокрутки: Полосы прокрутки помогут нам складывать большое количество данных, не беспокоясь о пространстве в окне. Доступ к задачам можно получить, прокрутив список.
  3. Фрейм: Фрейм будет использоваться для размещения внутри него таких виджетов, как список и полосы прокрутки. Это даст нам возможность выровнять Listbox по левому краю и полосу прокрутки по правому краю, чтобы они выглядели параллельно и идеально.
  4. Кнопки: мы добавим в окно два виджета-кнопки . Один из них — добавить больше задач в Listbox, а другой — удалить задачи из Listbox.
  5. Поле ввода : пользователи будут вводить задачу в поле ввода, которое в дальнейшем будет отображаться в списке.
  6. Окно сообщения: окно сообщения Python Tkinter используется для отображения сообщения об ошибке, когда пользователь нажимает кнопку добавления с пустым полем ввода.

Объяснение кода для списка задач в Python Tkinter

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

Шаг 1 : Импорт модулей

Прежде чем мы начнем использовать Tkinter, нам нужно вызвать Tkinter для использования. поэтому мы импортируем модуль. Здесь * означает все. Итак, мы импортируем все из Tkinter, затем во второй строке мы импортируем окно сообщения из Tkinter.

from tkinter import *
from tkinter import messagebox

Шаг 2: Создайте и настройте окно

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

  • ws используется для инициализации Tk() . Теперь ws будет вызываться как родительское окно. Все остальные виджеты будут размещены на нем.
  • ws.geometry(‘width x height + x-position+ y-position’)
    Все предоставленные значения должны быть целыми числами.
    • ширина относится к горизонтальному пространству окна.
    • высота относится к вертикальному пространству окна.
    • x-position относится к положению окна на дисплее относительно оси x.
    • Y-позиция относится к положению окна на дисплее относительно оси Y.
  • title добавит заголовок к окну В нашем случае мы указали название нашего веб-сайта в качестве заголовка. Вы можете найти заголовок в верхнем левом углу окна рядом с пером.
  • config используется для задания цвета фона окна.
  • resizable принимает логические значения. Поскольку логические значения предоставлены как false для высоты и ширины, это означает, что размер окна нельзя изменить. Чтобы узнать больше об изменении размера, прочитайте наш блог о размере окон python Tkinter.
  • ws.mainloop() удерживает экран, чтобы мы могли видеть окно. Это бесконечный цикл. экран появляется, а затем исчезает, но с этим бесконечным циклом этот процесс появления и исчезновения продолжает происходить очень быстро. И мы продолжаем видеть обновленное окно.
ws = Tk()
ws.geometry('500x450+500+200')
ws.title('PythonGuides')
ws.config(bg='#223441')
ws.resizable(width=False, height=False)

....
....

ws.mainloop()

Шаг 3: Создание рамки

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

  • Виджеты Frame используются для хранения других виджетов.
  • Они помогают поддерживать чистоту и организованность пользовательского интерфейса (UI) и взаимодействия с пользователем (UX).
  • Двигаясь вперед, мы разместим список, полосы прокрутки и кнопки внутри фрейма.
  • Таким образом, рамка будет действовать как дополнительное окно над родительским окном.
  • Еще одним преимуществом размещения фрейма является то, что теперь мы добавим полосы прокрутки к фрейму, и это решает нашу задачу.
  • Полосы прокрутки разместить непросто, но с помощью фреймов мы можем сделать это в кратчайшие сроки.
  • pady=10 означает, что мы добавили дополнительные отступы вокруг фрейма снаружи.
frame = Frame(ws)
frame.pack(pady=10)

Шаг 4: Добавление списка

В этом разделе мы узнаем, почему и как мы использовали Listbox в окне.

  • lb — это имя переменной для хранения Listbox.
  • Listbox размещается на рамке окна.
  • ширина: предоставленное горизонтальное пространство равно 25.
  • высота: предусмотрено 8 рядов в вертикальном положении.
  • Шрифт: шрифт Times New Roman имеет 14 размеров.
  • bd = 0 относится к границе нуля
  • fg — цвет переднего плана или цвет текста.
  • highlightthickness=0 каждый раз, когда фокус перемещается на любой элемент, тогда он не должен показывать никакого движения, которое имеет значение 0. по умолчанию он имеет некоторое значение.
  • selectbackground определяет цвет выделенного элемента в списке.
  • activestyle=”none” удаляет подчеркивание, которое появляется, когда элемент выбран или находится в фокусе.
  • используется менеджер геометрии pack()
  • side=LEFT , это сохранит список в левой части фрейма. Мы сделали это специально, чтобы мы могли назначить правильную позицию полосам прокрутки.
  • fill=BOTH это заполнит пустое пространство в обоих направлениях, которые являются x и y
lb = Listbox(
    frame,
    width=25,
    height=8,
    font=('Times', 18),
    bd=0,
    fg='#464646',
    highlightthickness=0,
    selectbackground='#a6a6a6',
    activestyle="none",
    
)
lb.pack(side=LEFT, fill=BOTH)

Шаг 5: Добавление фиктивных данных

  • Мы добавили фиктивные данные, чтобы приложение было готово к просмотру. Вы добавляете или удаляете любые данные, которые хотите.
  • данные имеют формат списка и хранятся в переменной с именем task_list .
  • Цикл for используется для вставки данных в список.
  • каждый раз, когда цикл запускается, он добавляет элемент в список, и этот процесс продолжается до тех пор, пока не будут вставлены все элементы в списке задач .
  • lb.insert(END, item) эта команда упорядочивает элементы списка.
    • lb — это переменная, используемая для Listbox.
    • insert — это встроенный метод Listbox для вставки данных.
    • END означает, что в конце будет добавлен новый элемент. Если END заменить на 0 , то новые данные будут добавлены вверху.
    • item — это элемент списка из task_list
task_list = [
    'Eat apple',
    'drink water',
    'go gym',
    'write software',
    'write documentation',
    'take a nap',
    'Learn something',
    'paint canvas'
    ]


for item in task_list:
    lb.insert(END, item)

Шаг 6: Добавление полос прокрутки

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

  • Полосы прокрутки используются для того, чтобы пользователи могли прокручивать информацию, размещенную в окне ограниченного размера.
  • В этом случае полосы прокрутки размещаются на фрейме, а назначенной переменной является sb.
  • Используемый метод геометрии — это pack(), так что все остается динамическим и в последовательности.
  • side=RIGHT мы разместили полосы прокрутки с правой стороны фрейма.
  • В приведенном выше коде мы указали side=LEFT для Listbox. Таким образом, оба виджета назначаются параллельно.
  • fill=BOTH это заполнит пустое пространство в обоих направлениях, которые являются x и y
  • lb.config(yscrollcommand=sb.set) здесь мы определили назначение полосы прокрутки. Другими словами, у нас есть привязка списка к полосе прокрутки.
  • sb.config(command=lb.yview) , здесь yview означает, что полоса прокрутки будет двигаться в вертикальном направлении. Если бы это был xview, полоса прокрутки работала бы в горизонтальном направлении.
sb = Scrollbar(frame)
sb.pack(side=RIGHT, fill=BOTH)

lb.config(yscrollcommand=sb.set)
sb.config(command=lb.yview)

Шаг 7: Добавление окна ввода

  • Поле ввода используется для ввода информации от пользователя.
  • ws : поле ввода помещается в родительское окно
  • шрифт: обеспечивает имя шрифта, т.е. «Times New Roman» и размер 14
  • Используемый менеджер геометрии представляет собой пакет с отступом 20 за пределами виджета.
my_entry = Entry(
    ws,
    font=('times', 24)
    )

my_entry.pack(pady=20)

Шаг: 8 Добавляем еще одну рамку для кнопок

Фреймы используются для организации виджетов. Мы использовали отдельную рамку для кнопок.

button_frame = Frame(ws)
button_frame.pack(pady=20)

Шаг 9: Добавление кнопок

  • Кнопки размещены так, чтобы при нажатии запускать какое-то действие.
  • Здесь мы создали две кнопки ( addTask и deleteTask ). Оба они имеют одинаковые функции и принимают цвет фона и команды.
  • Команда : при нажатии кнопки вызывается функция, указанная в команде. В этом случае, если пользователь нажимает кнопку addTask_btn , вызывается функция newTask , а когда пользователь нажимает кнопку delTask_btn , вызывается функция delTask .

addTask_btn = Button(
    button_frame,
    text='Add Task',
    font=('times 14'),
    bg='#c5f776',
    padx=20,
    pady=10,
    command=newTask
)
addTask_btn.pack(fill=BOTH, expand=True, side=LEFT)

delTask_btn = Button(
    button_frame,
    text='Delete Task',
    font=('times 14'),
    bg='#ff8b61',
    padx=20,
    pady=10,
    command=deleteTask
)
delTask_btn.pack(fill=BOTH, expand=True, side=LEFT)

Шаг 10: функция newTask()

  • В этой функции мы сохранили значение поля ввода в переменной задачи
  • Метод get() используется для извлечения значения, предоставленного пользователем в поле ввода.
  • Условие if-else применяется, чтобы избежать появления пробела в списке.
  • если у задачи нет пустого места, то только она позволит ей сохранить информацию в списке, в противном случае она отобразит окно предупреждающего сообщения, информирующее пользователя о том, что поле ввода не может быть пустым.
def newTask():
    task = my_entry.get()
    if task != "":
        lb.insert(END, task)
        my_entry.delete(0, "end")
    else:
        messagebox.showwarning("warning", "Please enter some task.")

Шаг 11: функция deleteTask()

  • Здесь ANCHOR относится к выбранному элементу в списке.
  • lb переменная, назначенная Listbox
  • delete — это встроенная функция для удаления элемента Listbox.
  • Пользователь выберет элемент в списке, а затем, чтобы активировать эту функцию, он / она нажмет кнопку удаления задачи . Сразу же элемент исчезнет из списка.
def deleteTask():
    lb.delete(ANCHOR)

Полный исходный код:

from tkinter import *
from tkinter import messagebox

def newTask():
    task = my_entry.get()
    if task != "":
        lb.insert(END, task)
        my_entry.delete(0, "end")
    else:
        messagebox.showwarning("warning", "Please enter some task.")

def deleteTask():
    lb.delete(ANCHOR)
    
ws = Tk()
ws.geometry('500x450+500+200')
ws.title('PythonGuides')
ws.config(bg='#223441')
ws.resizable(width=False, height=False)

frame = Frame(ws)
frame.pack(pady=10)

lb = Listbox(
    frame,
    width=25,
    height=8,
    font=('Times', 18),
    bd=0,
    fg='#464646',
    highlightthickness=0,
    selectbackground='#a6a6a6',
    activestyle="none",
    
)
lb.pack(side=LEFT, fill=BOTH)

task_list = [
    'Eat apple',
    'drink water',
    'go gym',
    'write software',
    'write documentation',
    'take a nap',
    'Learn something',
    'paint canvas'
    ]

for item in task_list:
    lb.insert(END, item)

sb = Scrollbar(frame)
sb.pack(side=RIGHT, fill=BOTH)

lb.config(yscrollcommand=sb.set)
sb.config(command=lb.yview)

my_entry = Entry(
    ws,
    font=('times', 24)
    )

my_entry.pack(pady=20)

button_frame = Frame(ws)
button_frame.pack(pady=20)

addTask_btn = Button(
    button_frame,
    text='Add Task',
    font=('times 14'),
    bg='#c5f776',
    padx=20,
    pady=10,
    command=newTask
)
addTask_btn.pack(fill=BOTH, expand=True, side=LEFT)

delTask_btn = Button(
    button_frame,
    text='Delete Task',
    font=('times 14'),
    bg='#ff8b61',
    padx=20,
    pady=10,
    command=deleteTask
)
delTask_btn.pack(fill=BOTH, expand=True, side=LEFT)


ws.mainloop()

Вот выходной скриншот для приведенного выше кода. Здесь вы можете заметить, что Listbox появляется с полосой прокрутки. Поле ввода я разместил прямо под ним, а затем две кнопки.

Вот как мы можем создать список задач, используя Python Tkinter с самого начала.