JavaRush /Курси /Python SELF UA /Робота з діалоговими і спливаючими вікнами

Робота з діалоговими і спливаючими вікнами

Python SELF UA
Рівень 50 , Лекція 1
Відкрита

1. Стандартні діалогові вікна

Tkinter має вбудований модуль messagebox для відображення діалогових вікон, таких як інформаційні повідомлення, попередження, помилки та запити підтвердження. Ці діалоги зручні для спілкування з користувачем і створення сповіщень.

Підключення модуля messagebox


from tkinter import messagebox

Основні типи діалогів з messagebox

  1. Інформаційне вікно

    Інформаційні вікна повідомляють користувачу важливі відомості. Використовується функція messagebox.showinfo().

    
    def show_info():
        messagebox.showinfo("Інформація", "Це інформаційне повідомлення")
                
  2. Попередження

    Попереджувальне вікно повідомляє про потенційну проблему або рекомендує звернути увагу на певну дію. Функція messagebox.showwarning() створює вікно попередження.

    
    def show_warning():
        messagebox.showwarning("Попередження", "Це попереджувальне повідомлення")
                
  3. Вікно помилки

    Вікно помилки відображається при виникненні помилки. Функція messagebox.showerror() підходить для повідомлення користувача про помилку.

    
    def show_error():
        messagebox.showerror("Помилка", "Сталася помилка!")
                
  4. Запит підтвердження дії

    Запити підтвердження дозволяють користувачу підтвердити або скасувати дію. Функція messagebox.askyesno() повертає True або False залежно від вибору користувача.

    
    def confirm_exit():
        response = messagebox.askyesno("Вихід", "Ви впевнені, що хочете вийти?")
        if response:
            root.quit()
                

2. Вибір файлів і папок

Tkinter також надає модуль filedialog, який дозволяє користувачам вибирати файли і папки. Це корисно для застосунків, які працюють з файлами, де користувачу потрібно завантажити або зберегти файл.

Підключення модуля filedialog


from tkinter import filedialog

Основні функції filedialog

  1. Відкриття файлу: Функція askopenfilename() дозволяє користувачу вибрати файл для відкриття.
    
    def open_file():
        file_path = filedialog.askopenfilename(
            title="Відкрити файл",
            filetypes=[("Текстові файли", "*.txt"), ("Усі файли", "*.*")])
        if file_path:
            print("Файл обрано:", file_path)
                
  2. Збереження файлу: Функція asksaveasfilename() дозволяє користувачу вибрати шлях і назву для збереження файлу.
    
    def save_file():
        file_path = filedialog.asksaveasfilename(
            title="Зберегти файл",
            defaultextension=".txt",
            filetypes=[("Текстові файли", "*.txt"), ("Усі файли", "*.*")])
        if file_path:
            print("Файл збережено як:", file_path)
                
  3. Вибір папки: Функція askdirectory() дозволяє вибрати папку.
    
    def select_directory():
        directory_path = filedialog.askdirectory(title="Обрати папку")
        if directory_path:
            print("Папку обрано:", directory_path)
                

3. Налаштовувані спливаючі вікна

У доповнення до стандартних діалогових вікон, Tkinter надає віджет Toplevel для створення налаштовуваних спливаючих вікон. Ці вікна можна використовувати для створення багатофункціональних спливаючих вікон з полями введення, кнопками та іншими елементами інтерфейсу.

Створення спливаючого вікна з Toplevel


import tkinter as tk

# Функція для відкриття спливаючого вікна
def open_popup():
    popup = tk.Toplevel(root)
    popup.title("Спливаюче вікно")
    popup.geometry("300x200")

    label = tk.Label(popup, text="Введіть ваше ім'я:")
    label.pack(pady=10)

    entry = tk.Entry(popup)
    entry.pack(pady=5)

    # Кнопка для закриття вікна
    close_button = tk.Button(popup, text="Закрити", command=popup.destroy)
    close_button.pack(pady=10)

# Основне вікно
root = tk.Tk()
root.title("Основне вікно")
root.geometry("400x300")

# Кнопка для виклику спливаючого вікна
open_button = tk.Button(root, text="Відкрити спливаюче вікно", command=open_popup)
open_button.pack(pady=50)

root.mainloop()
    

Пояснення коду

  • tk.Toplevel(root) створює нове вікно, яке відображається поверх основного вікна root.
  • Елементи вікна: Всередині спливаючого вікна можна додавати мітки, поля введення та кнопки.
  • Кнопка "Закрити": Функція popup.destroy закриває спливаюче вікно.

4. Повноцінний додаток з діалогами і спливаючими вікнами

Тепер зберемо всі розглянуті елементи в одному додатку, яке включає стандартні діалогові вікна, вибір файлів і користувацьке спливаюче вікно.


import tkinter as tk
from tkinter import messagebox, filedialog

# Функції для стандартних діалогів
def show_info():
    messagebox.showinfo("Інформація", "Це інформаційне повідомлення")

def show_warning():
    messagebox.showwarning("Попередження", "Це попереджувальне повідомлення")

def show_error():
    messagebox.showerror("Помилка", "Сталася помилка!")

def confirm_exit():
    response = messagebox.askyesno("Вихід", "Ви впевнені, що хочете вийти?")
    if response:
        root.quit()

def open_file():
    file_path = filedialog.askopenfilename(title="Відкрити файл", filetypes=[("Текстові файли", "*.txt"), ("Усі файли", "*.*")])
    if file_path:
        messagebox.showinfo("Файл обрано", file_path)

def save_file():
    file_path = filedialog.asksaveasfilename(title="Зберегти файл", defaultextension=".txt", filetypes=[("Текстові файли", "*.txt"), ("Усі файли", "*.*")])
    if file_path:
        messagebox.showinfo("Файл збережено як", file_path)

def select_directory():
    directory_path = filedialog.askdirectory(title="Обрати папку")
    if directory_path:
        messagebox.showinfo("Папку обрано", directory_path)

# Функція для налаштовуваного спливаючого вікна
def open_popup():
    popup = tk.Toplevel(root)
    popup.title("Спливаюче вікно")
    popup.geometry("300x200")

    tk.Label(popup, text="Введіть ваше ім'я:").pack(pady=10)
    name_entry = tk.Entry(popup)
    name_entry.pack(pady=5)

    tk.Button(popup, text="Закрити", command=popup.destroy).pack(pady=10)

# Основне вікно
root = tk.Tk()
root.title("Додаток з діалоговими і спливаючими вікнами")
root.geometry("400x400")

# Кнопки для виклику різних діалогів і спливаючих вікон
tk.Button(root, text="Інформація", command=show_info).pack(pady=5)
tk.Button(root, text="Попередження", command=show_warning).pack(pady=5)
tk.Button(root, text="Помилка", command=show_error).pack(pady=5)
tk.Button(root, text="Підтвердження виходу", command=confirm_exit).pack(pady=5)
tk.Button(root, text="Відкрити файл", command=open_file).pack(pady=5)
tk.Button(root, text="Зберегти файл", command=save_file).pack(pady=5)
tk.Button(root, text="Обрати папку", command=select_directory).pack(pady=5)
tk.Button(root, text="Відкрити спливаюче вікно", command=open_popup).pack(pady=20)

root.mainloop()
    
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ