Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 9354 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.