web-dev-qa-db-ja.com

1つのファイルタイプに複数の拡張子を追加するmac--tkinter / filedialog / askopenfilename

tkinterfiledialogを使用してMacでファイルを選択しようとしています。

これは、次のように1つのファイルタイプで正常に機能します。

_filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx)])
_

ただし、xlsxまたはxlsファイルのいずれかを選択したいと思います。検索して質問を見つけました filedialog、tkinter、ファイルを開く 。私は同様の方法を使用しますが、これに変更するとMacでは機能しません。

filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx; *.xls")])

ファイルダイアログでxlsxまたはxlsファイルを選択するにはどうすればよいですか?

5
Joe

ワイルドカードパターンは、;(Python)で確認済み)ではなくスペースで区切る必要があるようです。 3.5.1):

from tkinter import filedialog

# add `, initialdir="..."` to set the initial directory shown in the dialog
filedialog.askopenfilename(filetypes=[("Excel files", ".xlsx .xls")])

注意:

  • "*.xlsx *.xls"も機能しますが(少なくともWindowsとmacOSでは)、最初の*は必要ありません。[1]
  • .*または*.*が機能するか(フィルターなし)は、プラットフォームに依存しているようです。 省略filetypesは、その場合のより良いオプションです。
  • 同様に、baseファイル名の一致する部分の動作(foo.txtfoo*.txtなど)はプラットフォームに依存しているように見えます:Windowsでは、これらは**foo.txtおよび*foo*.txt)を付加して機能しますが、macOSでは何にも一致しないようです。

プラットフォームに依存する動作が代わりに/異なるtkinterバージョンに対応している場合は、お知らせください。


[1] JakubBláha は、Windows10バージョン1903のPython 3.7.4では"*.xlsx *.xls"が実際には機能しなかったと報告しています(ただし、同じ問題が発生します);安全のため、不要な場合は*を省略してください。

12
mklement0

少なくともWindowsでは、複数のファイルタイプを開くことができるようにしたいが、常に一度に1つだけ開くことができるようにする場合、コードは次のようになります。

filedialog.askopenfilename(filetypes=[("Excel file","*.xlsx"),("Excel file 97-2003","*.xls")])

両方のファイルタイプを切り替えずに同時に選択できるようにするには、同じ名前にする必要があります。

filedialog.askopenfilename(filetypes=[("Excel file","*.xlsx"),("Excel file", "*.xls")])
1
J.P.