如何在CustomTkinter图像编辑器中仅显示PNG与JPEG格式文件?
解决文件对话框仅显示PNG和JPEG格式的问题
要限制文件浏览器只显示PNG和JPEG格式的文件,只需修改imageWidgets.py中的openDiag方法,给tkinter.filedialog.askopenfile添加filetypes参数即可。
修改后的关键代码片段
def openDiag(self): # 定义允许的文件类型 file_types = [ ("图像文件", "*.png *.jpg *.jpeg"), ("PNG文件", "*.png"), ("JPEG文件", "*.jpg *.jpeg") ] # 传递filetypes参数并处理用户取消选择的情况 file = fd.askopenfile(filetypes=file_types) if file: path = file.name self.importFunc(path)
修改说明
filetypes参数接受列表格式,每个元素是元组:第一个值是显示在对话框下拉菜单的类型名称,第二个值是对应文件扩展名的通配符- 添加
if file:判断,避免用户取消选择文件时触发AttributeError(取消操作时askopenfile返回None)
完整修改后的imageWidgets.py代码
import customtkinter as ctk from tkinter import filedialog as fd from tkinter import Canvas from settings import * class ImageImport(ctk.CTkFrame): def __init__(self, parent, importFunc): super().__init__(master = parent) self.importFunc = importFunc # widget self.button = ctk.CTkButton(master = self, text = 'Open Image', command = self.openDiag) self.button.pack(expand = True) def openDiag(self): file_types = [ ("图像文件", "*.png *.jpg *.jpeg"), ("PNG文件", "*.png"), ("JPEG文件", "*.jpg *.jpeg") ] file = fd.askopenfile(filetypes=file_types) if file: path = file.name self.importFunc(path) class ImageOutput(ctk.CTkCanvas): def __init__(self, parent, resizeImage): super().__init__( master = parent, background = BACKGROUND, bd = 0, highlightthickness = 0, relief = 'ridge' ) self.bind('<Configure>', resizeImage) self.grid(row = 0, column = 1, sticky = 'nsew') class CloseOutput(ctk.CTkButton): def __init__(self, parent, command): super().__init__( master = parent, text = 'X', text_color = WHITE, fg_color = 'transparent', width = 40, height = 40, # make it as square corner_radius = 0, hover_color = CLOSE_RED, command = command ) self.place(relx = 0.99, rely = 0.01, anchor = 'ne')
修改完成后,点击“Open Image”按钮打开的文件对话框将仅显示指定的PNG和JPEG格式文件,同时避免了用户取消选择时的程序异常。
内容的提问来源于stack exchange,提问作者GANESH312006
相关产品推荐
相关产品推荐

