Мои вопросы
- Невозможно переключиться между
filetypes
в Filter
(см. Рисунок ниже), поскольку они находятся в сером режиме, если установлено filetypes
, как показано ниже
filetypes = [
("Python File", "*.py"),
("Image File", "*.bmp"),
("All Files", "*.*")
]
Хотя тип файла по умолчанию
.py
, мы также можем выбрать
.bmp
в окне, так как
test.bmp
выделен. Это означает, что
filetypes
,
.py
и
.bmp
могут быть активированы одновременно. Это поведение
Filter
нормально?
Я ожидаю, что мы можем выделить один тип из набора filetypes
, и эти параметры должны быть mutually exclusive
, т. Е. Если выбрать Python File (.py)
в Filter
, тоТОЛЬКО .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")]
- Оставить только
("All Files", "*.*")
,Это то, что я ожидаю, и *.*
наконец вступает в силу.
filetypes = [("All Files", "*.*")]
Информация о системе
- macOS Catalina
- python 3.7.5
- TkVersion 8.6