我的问题
- 由于它们处于灰色模式,因此无法在“过滤器”中切换文件类型(请参见下面的图片),如果按照下面我的代码设置了“文件类型”:
filetypes = [
("Python File", "*.py"),
("Image File", "*.bmp"),
("All Files", "*.*")
]
尽管默认的文件类型是
.py
,但由于窗口中高亮显示了test.bmp
,我们也可以选择.bmp
。这意味着filetypes
,即.py
和.bmp
,可以同时被激活。这种Filter
行为正常吗?我期望的是,我可以从
filetypes
集合中单独选择一种类型,并且这些选项应该是互斥的(即如果在Filter
中选择Python File (.py)
,那么只有.py
文件可供在窗口中选择)。参见图像: 以下是我的代码:
from tkinter import *
from tkinter import ttk
from tkinter.filedialog import askopenfilename
# from tkinter.filedialog import askopenfile
# from tkinter.filedialog import askopenfilenames
filetypes = [
("Python File", "*.py"),
("Image File", "*.bmp"),
("All Files", "*.*")
]
def OpenFile():
p = askopenfilename(initialdir="../",
filetypes =filetypes,
title = "Choose a file.")
print ("Path to File: \n", p)
#Using try in case user types in unknown file
# or closes without choosing a file.
# try:
# with open(p, 'r') as f:
# print("Content of File:\n", f.read())
# except:
# print("Error!")
root = Tk()
root.title( "File Opener")
label = ttk.Label(root,
text ="File Read Test!",
foreground="red",
font=("Helvetica", 16))
label.pack()
menu = Menu(root)
root.geometry("300x200")
root.config(menu=menu)
file = Menu(menu)
file.add_command(label = 'Open', command = OpenFile)
file.add_command(label = 'Exit', command = root.quit)
menu.add_cascade(label = 'File', menu = file)
root.mainloop()
更多示例:
- 如果在下面的代码中删除
("All Files", "*.*")
,会发生什么?仍然无法在文件类型之间切换,.py
和.bmp
都是活动的。所有其他文件类型与以前的设置一样不在范围内。
filetypes = [
("Python File", "*.py"),
("Image File", "*.bmp")]
- 如果我只留下
("所有文件", "*.*")
,那么结果就是我期望的,*.*
最终会影响对话框。
filetypes = [("All Files", "*.*")]
系统版本信息:
- macOS Catalina
- Python 3.7.5
- Tkinter 8.6
*.* 或 *, *.py 或 .py...
,但在这种情况下没有效果。我相信这个问题与如何指定文件模式无关。 - Kuo