另存为,每个文件类型都有不同的回调函数
Save As, each filetype has different callback function
我使用 python tkinter,并导入 tkinter.filedialog 保存为文件。该程序具有保存每种文件类型的功能。
仅使用 filedialog.asksaveasfilename
Returns 文件路径。
问题:如何获取文件类型,调用正确的函数?
下面是我所做的示例代码。
python
filename= filedialog.asksaveasfilename(title="Select file", filetypes=(("PNG", "*.png"), ("EPS", "*.eps"), ("TXT", "*.txt"), ("XML", "*.xml")))
if filetype is TYPE_1:
function_1()
elif filetype is TYPE_2:
function_2()
您可以将选项 defaultextension='.'
添加到 filedialog.asksaveasfilename()
,然后用户在保存对话框 window 中选择的任何扩展名都将用作 "default extension",并且扩展名将附加到保存文件的路径。然后,您可以使用 os.path.splitext()
检索扩展名,如下所示。
我还为 filetypes=
选项使用了命名元组,因为我认为它看起来更好,但无论如何都没有必要。
import os
import tkinter as tk
from collections import namedtuple
from tkinter import filedialog
class MainApplication:
def __init__(self, parent):
self.b1 = tk.Button(parent, text='Save', command=self.save_dialog)
self.b1.pack()
def png(self):
print('DO SOMETHING WHEN FILE EXT IS .PNG')
def eps(self):
print('DO SOMETHING WHEN FILE EXT IS .eps')
def txt(self):
print('DO SOMETHING WHEN FILE EXT IS .txt')
def xml(self):
print('DO SOMETHING WHEN FILE EXT IS .xml')
def save_dialog(self):
Types = namedtuple('Types', 'name ext')
png = Types('PNG', '.png')
eps = Types('EPS', '.eps')
txt = Types('TXT', '.txt')
xml = Types('XML', '.xml')
path = filedialog.asksaveasfilename(title='Select file',
defaultextension='.',
filetypes=(png, eps, txt, xml)
)
filename, ext = os.path.splitext(path)
if ext == png.ext:
self.png()
elif ext == eps.ext:
self.eps()
elif ext == txt.ext:
self.txt()
elif ext == xml.ext:
self.xml()
if __name__ == '__main__':
root = tk.Tk()
MainApplication(root)
root.mainloop()
我使用 python tkinter,并导入 tkinter.filedialog 保存为文件。该程序具有保存每种文件类型的功能。
仅使用 filedialog.asksaveasfilename
Returns 文件路径。
问题:如何获取文件类型,调用正确的函数?
下面是我所做的示例代码。
python
filename= filedialog.asksaveasfilename(title="Select file", filetypes=(("PNG", "*.png"), ("EPS", "*.eps"), ("TXT", "*.txt"), ("XML", "*.xml")))
if filetype is TYPE_1:
function_1()
elif filetype is TYPE_2:
function_2()
您可以将选项 defaultextension='.'
添加到 filedialog.asksaveasfilename()
,然后用户在保存对话框 window 中选择的任何扩展名都将用作 "default extension",并且扩展名将附加到保存文件的路径。然后,您可以使用 os.path.splitext()
检索扩展名,如下所示。
我还为 filetypes=
选项使用了命名元组,因为我认为它看起来更好,但无论如何都没有必要。
import os
import tkinter as tk
from collections import namedtuple
from tkinter import filedialog
class MainApplication:
def __init__(self, parent):
self.b1 = tk.Button(parent, text='Save', command=self.save_dialog)
self.b1.pack()
def png(self):
print('DO SOMETHING WHEN FILE EXT IS .PNG')
def eps(self):
print('DO SOMETHING WHEN FILE EXT IS .eps')
def txt(self):
print('DO SOMETHING WHEN FILE EXT IS .txt')
def xml(self):
print('DO SOMETHING WHEN FILE EXT IS .xml')
def save_dialog(self):
Types = namedtuple('Types', 'name ext')
png = Types('PNG', '.png')
eps = Types('EPS', '.eps')
txt = Types('TXT', '.txt')
xml = Types('XML', '.xml')
path = filedialog.asksaveasfilename(title='Select file',
defaultextension='.',
filetypes=(png, eps, txt, xml)
)
filename, ext = os.path.splitext(path)
if ext == png.ext:
self.png()
elif ext == eps.ext:
self.eps()
elif ext == txt.ext:
self.txt()
elif ext == xml.ext:
self.xml()
if __name__ == '__main__':
root = tk.Tk()
MainApplication(root)
root.mainloop()