130.54K
Category: programmingprogramming

Библиотека tkinter

1.

Библиотека tkinter позволяет создавать
графические интерфейсы для Pythonприложений. Она входит в стандартную
библиотеку Python и предоставляет набор
инструментов для работы с окнами,
кнопками, полями ввода, меню и другими
элементами интерфейса.

2.

1. Создание главного окна
Каждое приложение начинается с
создания главного окна
• import tkinter as tk
• root = tk.Tk() # Создаем главное окно
• root.title("Простое приложение") #
Устанавливаем заголовок окна
• root.geometry("300x200") # Задаем размеры
окна
• root.mainloop() # Запускаем главный цикл
приложения

3.

Добавление виджетов (элементов
интерфейса)
• Метка (Label)
• Позволяет отображать текст:
label = tk.Label(root, text="Привет, Tkinter!",
font=("Arial", 14))
label.pack(pady=10) # Размещаем метку в
окне с отступом

4.

Кнопка (Button)
Создает интерактивную кнопку:
def on_click():
print("Кнопка нажата!")
button = tk.Button(root, text="Нажми меня",
command=on_click)
button.pack()

5.

Поле ввода (Entry)
Позволяет вводить текст:
entry = tk.Entry(root)
entry.pack()
def show_text():
print("Введенный текст:", entry.get())
btn = tk.Button(root, text="Показать текст",
command=show_text)
btn.pack()

6.

Организация элементов
(менеджеры геометрии)
Метод pack()
Размещает элементы сверху вниз:
label1 = tk.Label(root, text="Первая метка")
label1.pack()
label2 = tk.Label(root, text="Вторая метка")
label2.pack()

7.

Метод grid()
Размещает элементы в виде
таблицы
label1 = tk.Label(root, text="Имя:")
label1.grid(row=0, column=0)
entry1 = tk.Entry(root)
entry1.grid(row=0, column=1)

8.

для виджетов)
Фреймы помогают группировать
элементы:
import tkinter as tk # Импортируем tkinter
root = tk.Tk() # Создаем главное окно
root.title("Пример использования Frame") # Устанавливаем заголовок окна
# Создаем фрейм (контейнер) с границей
frame = tk.Frame(root, borderwidth=2, relief="solid")
# borderwidth=2 - толщина рамки (по умолчанию 0)
# relief="solid" - стиль границы (solid - сплошная линия, другие варианты: "raised", "sunken", "ridge", "groove")
frame.pack(pady=10) # Размещаем фрейм в окне с отступом в 10 пикселей сверху и снизу
# Добавляем кнопки в созданный фрейм
btn1 = tk.Button(frame, text="Кнопка 1")
btn2 = tk.Button(frame, text="Кнопка 2")
btn1.pack(side="left", padx=5) # Размещаем первую кнопку слева с отступом 5 пикселей
btn2.pack(side="right", padx=5) # Размещаем вторую кнопку справа с отступом 5 пикселей
root.mainloop() # Запускаем главный цикл Tkinter

9.

import tkinter as tk # Импортируем tkinter
root = tk.Tk() # Создаем главное окно
root.title("Пример меню") # Устанавливаем заголовок окна
# Создаем объект главного меню
menu = tk.Menu(root)
root.config(menu=menu) # Привязываем меню к главному окну
# Создаем вложенное меню "Файл"
file_menu = tk.Menu(menu, tearoff=0)
# tearoff=0 - убирает пункт "отсоединить меню" (по умолчанию tearoff=1, что создает пункт с пунктирной линией)
menu.add_cascade(label="Файл", menu=file_menu) # Добавляем меню "Файл" в главное меню
file_menu.add_command(label="Открыть", command=lambda: print("Открываем файл"))
# add_command() - добавляет пункт в меню, label - название пункта
file_menu.add_separator() # Добавляет разделительную линию
file_menu.add_command(label="Выход", command=root.quit)
# Кнопка выхода из приложения (вызывает функцию root.quit)
# Создаем еще одно вложенное меню "Помощь"
help_menu = tk.Menu(menu, tearoff=0)
menu.add_cascade(label="Помощь", menu=help_menu)
help_menu.add_command(label="О программе", command=lambda: print("Версия 1.0"))
root.mainloop() # Запускаем главный цикл Tkinter

10.

11.

import tkinter as tk # Импортируем библиотеку Tkinter для создания графического интерфейса
from tkinter import messagebox # Импортируем модуль для вывода сообщений пользователю
import numpy as np # Импортируем библиотеку numpy для работы с матрицами
# Функция для создания полей ввода для матрицы
def create_matrix_input():
try:
global entries, size # Используем глобальные переменные для хранения ввода и размера матрицы
size = int(entry_size.get()) # Получаем размер матрицы от пользователя
# Удаляем предыдущие элементы (если они были) из фрейма
for widget in frame.winfo_children(): # Перебираем все виджеты внутри фрейма
widget.destroy() # Удаляем их
entries = [] # Список для хранения ссылок на поля ввода
for i in range(size): # Проходимся по строкам матрицы
row_entries = [] # Создаем список для хранения одной строки
for j in range(size): # Проходимся по столбцам матрицы
entry = tk.Entry(frame, width=5) # Создаем поле ввода шириной 5 символов
entry.grid(row=i, column=j, padx=5, pady=5) # Размещаем поле ввода в сетке с отступами
row_entries.append(entry) # Добавляем поле ввода в список текущей строки
entries.append(row_entries) # Добавляем строку в общий список
# Создаем кнопку для вычисления детерминанта
btn_calc = tk.Button(frame, text="Вычислить детерминант", command=calculate_determinant)
btn_calc.grid(row=size, columnspan=size, pady=10) # Размещаем кнопку под матрицей
except ValueError: # Обрабатываем ошибку, если введено некорректное значение
messagebox.showerror("Ошибка", "Введите корректное число") # Выводим сообщение об ошибке

12.

# Функция для вычисления детерминанта
def calculate_determinant():
try:
matrix = [] # Создаем пустой список для хранения значений матрицы
for row in entries: # Перебираем строки матрицы
matrix.append([float(entry.get()) for entry in row]) # Преобразуем введенные значения в числа и добавляем
в список
determinant = round(np.linalg.det(matrix), 4) # Вычисляем детерминант с округлением до 4 знаков
messagebox.showinfo("Результат", f"Детерминант: {determinant}") # Показываем результат пользователю
except ValueError: # Обрабатываем случай, если введены некорректные данные
messagebox.showerror("Ошибка", "Заполните все ячейки корректными числами") # Выводим сообщение об
ошибке
except np.linalg.LinAlgError: # Обрабатываем ошибку при вычислении детерминанта
messagebox.showerror("Ошибка", "Ошибка при вычислении детерминанта") # Выводим сообщение об
ошибке

13.

# Создаем главное окно приложения
root = tk.Tk()
root.title("Калькулятор детерминанта матрицы") # Устанавливаем заголовок окна
# Создаем текстовую метку для ввода размера матрицы
label_size = tk.Label(root, text="Введите размер матрицы (n):")
label_size.pack() # Размещаем метку в окне
# Поле ввода для ввода размера матрицы
entry_size = tk.Entry(root)
entry_size.pack() # Размещаем поле ввода в окне
# Кнопка для подтверждения ввода размера матрицы
btn_create = tk.Button(root, text="Создать матрицу", command=create_matrix_input)
btn_create.pack() # Размещаем кнопку в окне
# Создаем фрейм для размещения полей ввода матрицы
frame = tk.Frame(root)
frame.pack() # Размещаем фрейм в главном окне
# Запускаем главный цикл обработки событий Tkinter
root.mainloop()

14.

Простой выпадающий список
import tkinter as tk # Импортируем библиотеку tkinter
root = tk.Tk() # Создаем главное окно
root.title("Пример OptionMenu") # Устанавливаем заголовок окна
# Создаем переменную, в которой будет храниться выбранное значение
selected_option = tk.StringVar(value="Выберите вариант")
# tk.StringVar() – это специальная переменная tkinter для работы с текстом
# value="Выберите вариант" – устанавливаем начальное значение (отображается в OptionMenu)
# Список вариантов для выбора
options = ["Вариант 1", "Вариант 2", "Вариант 3"]
# Создаем выпадающее меню (OptionMenu)
dropdown = tk.OptionMenu(root, selected_option, *options)
# root – окно, в котором размещаем OptionMenu
# selected_option – переменная, которая будет хранить выбранное значение
# *options – передаем список возможных значений (звездочка * распаковывает список)
dropdown.pack(pady=10) # Размещаем в окне с отступом 10 пикселей сверху и снизу
root.mainloop() # Запускаем главный цикл Tkinter

15.

16.

Выпадающий список с кнопкой
import tkinter as tk # Импортируем tkinter
from tkinter import messagebox # Импортируем модуль для всплывающих сообщений
# Функция для отображения выбранного значения
def show_selection():
messagebox.showinfo("Выбор", f"Вы выбрали: {selected_option.get()}")
# messagebox.showinfo() – показывает всплывающее окно с информацией
# selected_option.get() – получаем текущее выбранное значение из OptionMenu
root = tk.Tk() # Создаем главное окно
root.title("Выбор из списка") # Заголовок окна
# Создаем переменную для хранения выбора (по умолчанию USD)
selected_option = tk.StringVar(value="USD")
# tk.StringVar() – специальный тип переменной для хранения строк в Tkinter
# value="USD" – начальное значение, которое сразу отображается в OptionMenu
# Список валют для выбора
currencies = ["USD", "EUR", "CNY"]
# Создаем выпадающее меню (OptionMenu)
dropdown = tk.OptionMenu(root, selected_option, *currencies)
# root – окно, в котором создаем меню
# selected_option – переменная, в которой хранится выбор пользователя
# *currencies – распаковываем список валют и передаем в OptionMenu
dropdown.pack(pady=10) # Размещаем в окне с отступом 10 пикселей сверху и снизу
# Создаем кнопку, при нажатии на которую отобразится выбранный вариант
btn = tk.Button(root, text="Показать выбор", command=show_selection)
# text="Показать выбор" – текст, который будет на кнопке
# command=show_selection – вызываем функцию, которая обработает нажатие
btn.pack() # Размещаем кнопку в окне
root.mainloop() # Запускаем главный цикл Tkinter

17.

18.

• Задание по tkinter
• Создать Конвертер валют на основе tkinter
• Требования:
• Пользователь вводит сумму в рублях (Entry).
• Выбирает валюту для конвертации (USD, EUR,
CNY) из выпадающего списка (OptionMenu).
• Нажимает кнопку "Конвертировать".
• Программа пересчитывает сумму по
заданному курсу и выводит результат (Label).

19.

import tkinter as tk
from tkinter import messagebox
def convert_currency():
try:
amount = float(entry_amount.get()) # Получаем сумму от пользователя
currency = selected_currency.get() # Получаем выбранную валюту
rates = {"USD": 90, "EUR": 97, "CNY": 12} # Фиксированные курсы валют
if currency in rates:
converted = round(amount / rates[currency], 2) # Пересчет валюты
messagebox.showinfo("Результат", f"{amount} RUB = {converted} {currency}")
else:
messagebox.showerror("Ошибка", "Выберите валюту!")
except ValueError:
messagebox.showerror("Ошибка", "Введите корректное число!")
# Создание окна
root = tk.Tk()
root.title("Конвертер валют")
# Поле ввода суммы
tk.Label(root, text="Введите сумму в рублях:").pack()
entry_amount = tk.Entry(root)
entry_amount.pack()
# Выпадающий список с валютами
selected_currency = tk.StringVar(value="Выберите валюту")
tk.OptionMenu(root, selected_currency, "USD", "EUR", "CNY").pack()
# Кнопка для конвертации
tk.Button(root, text="Конвертировать", command=convert_currency).pack()
root.mainloop()
English     Русский Rules