Okno dialogowe open file i save file w tkinter

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

Listing 1
  1. import tkinter as tk
  2. from tkinter import filedialog as fd
  3. class Application:
  4. def __init__(self):
  5. self.window = tk.Tk()
  6. self.window.geometry("500x500")
  7. self.window.title("Notatnik")
  8. # tworzenie menu
  9. self.menu = tk.Menu(self.window)
  10. submenu = tk.Menu(self.menu, tearoff = 0)
  11. self.menu.add_cascade(label = "Plik", menu = submenu)
  12. submenu.add_command(label = "Otwórz", command = self.open_file)
  13. submenu.add_command(label = "Zapisz", command = self.save_file)
  14. self.window.config(menu = self.menu, width = 50, height = 30)
  15. # dodawanie kontrolki typu Text i paska przewijania
  16. self.text = tk.Text(self.window)
  17. self.sb_text = tk.Scrollbar(self.window)
  18. self.sb_text.place(in_ = self.text, relx = 1., rely = 0, relheight = 1.)
  19. self.sb_text.config(command = self.text.yview)
  20. self.text.config(yscrollcommand = self.sb_text.set)
  21. self.text.place(x = 0, y = 0, relwidth = 1, relheight = 1, width = - 18)
  22. self.window.mainloop()
  23. def open_file(self):
  24. filename = fd.askopenfilename(filetypes=[("Plik tekstowy","*.txt")]) # wywołanie okna dialogowego open file
  25. if filename:
  26. with open(filename, "r", -1, "utf-8") as file:
  27. self.text.delete(1.0, tk.END)
  28. self.text.insert(tk.END, file.read())
  29. def save_file(self):
  30. filename = fd.asksaveasfilename(filetypes=[("Plik tekstowy","*.txt")], defaultextension = "*.txt") # wywołanie okna dialogowego save file
  31. if filename:
  32. with open(filename, "w", -1, "utf-8") as file:
  33. file.write(self.text.get(1.0, tk.END))
  34. 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.

Komentarze