Как получить выбранный формат в Tkinter?

#python #python-3.x #tkinter

#python #python-3.x #tkinter

Вопрос:

Я хочу создать кнопку для сохранения изображения по адресу, который мне дает address_txt, но проблема в том, что address_txt не дает мне выбранный формат, у него просто есть имя. как я могу получить выбранный формат?

 import tkinter
from tkinter import *
from tkinter import messagebox
from tkinter import filedialog
from PIL import ImageTk, Image
import PIL
from tkinter import ttk

root = Tk()

def save_1():
    address_txt = filedialog.asksaveasfilename(title="save",filetypes = (("All files","*"),("PNG file","*.png"),("JPG file","*.jpg"),("GIF file","*.gif")))
    print(address_txt)

btn_save = Button(root, text="Save",bg = "light blue",
font=("Times New Roman", 17), command=save_1)
btn_save.pack()

root.mainloop()
  

Комментарии:

1. Вы можете получить расширение файла из значения, возвращаемого из asksaveasfilename() с помощью image_format = os.path.splitext(address_txt)[1] .

2. Image.save(filename) определит формат вывода на основе переданного ему расширения файла filename .

Ответ №1:

Попробуйте передать typevariable в filedialog.asksaveasfilename .Пример ниже:

 from tkinter import *
from tkinter import filedialog
root = Tk()

def save_1():
    address_txt = filedialog.asksaveasfilename(title="save",filetypes = (("Alls","*"),("png","*.png"),("jpg","*.jpg"),("gif","*.gif")), typevariable=extension_name)
    print("The path is:", address_txt)
    print("The extension is:", extension_name.get())

extension_name = StringVar()
btn_save = Button(root, text="Save",bg = "light blue",
font=("Times New Roman", 17), command=save_1)
btn_save.pack()

root.mainloop()
  

Пример вывода:
введите описание изображения здесь

Ответ №2:

если вы знаете расширение, вы можете использовать параметр defaultextension:

 file = filedialog.asksaveasfile(mode='w', defaultextension=".png", filetypes=(("PNG file", "*.png"),("All Files", "*.*") ))
  

Комментарии:

1. если я знаю расширение, я могу добавить формат в конец строки