macOS tkinter: как работают типы файлов askopenfilename - PullRequest
0 голосов
/ 11 ноября 2019

Мои вопросы

  1. Невозможно переключиться между 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 файл будет доступен для выбора в окне.

enter image description here

Вот код:

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")]


![enter image description here

  • Оставить только ("All Files", "*.*"),Это то, что я ожидаю, и *.* наконец вступает в силу.
filetypes = [("All Files", "*.*")]

enter image description here

Информация о системе

  • macOS Catalina
  • python 3.7.5
  • TkVersion 8.6
...