Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 9499 razy

Kolejny zestaw okien dialogowych, jakie często zdarza się nam spotykać w różnych programach to okno Open file i Save file. Tak się cudownie składa, że z najdzikszą wręcz rozkoszą mogę powiadomić was, iż moduł tkinter udostępnia również obsługę i tych okien dialogowych. Coby zbyt dużo nie gadać i za wiele nie marudzić, oto praktyczny przykład zastosowania tych okien w bardzo prostym programiku do otwierania plików tekstowych (czyli jakby nie patrzeć notatnik):

import tkinter as tk from tkinter import filedialog as fd class Application: def __init__(self): self.window = tk.Tk() self.window.geometry("500x500") self.window.title("Notatnik") # tworzenie menu self.menu = tk.Menu(self.window) submenu = tk.Menu(self.menu, tearoff = 0) self.menu.add_cascade(label = "Plik", menu = submenu) submenu.add_command(label = "Otwórz", command = self.open_file) submenu.add_command(label = "Zapisz", command = self.save_file) self.window.config(menu = self.menu, width = 50, height = 30) # dodawanie kontrolki typu Text i paska przewijania self.text = tk.Text(self.window) self.sb_text = tk.Scrollbar(self.window) self.sb_text.place(in_ = self.text, relx = 1., rely = 0, relheight = 1.) self.sb_text.config(command = self.text.yview) self.text.config(yscrollcommand = self.sb_text.set) self.text.place(x = 0, y = 0, relwidth = 1, relheight = 1, width = - 18) self.window.mainloop() def open_file(self): filename = fd.askopenfilename(filetypes=[("Plik tekstowy","*.txt")]) # wywołanie okna dialogowego open file if filename: with open(filename, "r", -1, "utf-8") as file: self.text.delete(1.0, tk.END) self.text.insert(tk.END, file.read()) def save_file(self): filename = fd.asksaveasfilename(filetypes=[("Plik tekstowy","*.txt")], defaultextension = "*.txt") # wywołanie okna dialogowego save file if filename: with open(filename, "w", -1, "utf-8") as file: file.write(self.text.get(1.0, tk.END)) apl = Application()

Powyższy przykład pokazuje jak działają funkcje askopenfilename i asksavefilename znajdujące się w module filedialog znajdującym się w module tkinter. Obie te funkcje zwracają pustą krotkę, gdy zamknięto okno nie wybierając żadnego pliku. W przeciwnym przypadku zwraca ścieżkę do wybranego pliku. Poniżej pokazany został screenshoot programu z oknem dialogowym otwierającym plik.

Widok programu napisanego w Pythonie z wykorzystaniem modułu tkinter i użyciem okna dialogowego open file
Rys. 1
Widok programu wykorzystującego okno dialogowe open file.
Layout wykonany przez autora strony, wszelkie prawa zastrzeżone. Jakiekolwiek użycie części lub całości grafik znajdujących się na tej stronie bez pisemnej zgody jej autora surowo zabronione.