در برنامه گرافیکی، برای گزیدن یک فایل، از FileDialog ها کمک می گیریم که اجازه می دهند تا یک یا چندین فایل را برگزینیم. در Tkinter در پایتون نسخه ۳ کلاسی به نام filedialog هست که دارای چندین تابع برای کاربردهای متفاوت است. یکی از این تابع ها ()askopenfilename نام دارد که اجازه می دهد از یک دایرکتوری، یک فایل یا بهتر است بگوییم مسیر آن فایل درون دایرکتوری را بدست آوریم. برای نمونه مسیر یک فایل تصویری که می خواهیم آن را به متد ()Image.open بفرستیم.

متد ()askopenfilename

این تابع سه پارامتر را دریافت می کند که نخستین پارامتر initialdir نام دارد و مسیر دایرکتوری را نشان می دهد که می خواهیم FileDialog پیش فرض در آن دایرکتوری باز شود. پارامتر دیگر title است که عنوان پنجره FileDialog را نشان می دهد. سومین پارامتر filetypes است و گونه های فایل های قابل نمایش در پنجره FileDialog را نشان می دهد. این پارامتر خودش تاپلی از تاپل های درونی است که هر تاپل درونی دو المان دارد، نخستین المان یک رشته دلخواه است که عنوانی را برای معرفی گونه فایل نشان می دهد و دومین المان یک رشته است که پسوند فایل های نمایش شدنی مانند png. را نشان می دهد. برای نمونه در کد زیر پارامتر filetypes دارای دو تاپل درونی است که نخستین چون دومین المان آن *.* است، پس همه فایل ها یا All Files را نشان می دهد و دومین تاپل درونی چون المان دومش png.* است، پس PNG Files را نشان می دهد.

در کد بالا می بینید که متغیری به نام home_dir به پارامتر initialdir فرستاده شده است که درون مایه آن مسیر دایرکتوری خانگی کاربری است که است که به سیستم وارد شده است. دو کد زیر نخست بدست ماژول os، مقدار مسیر دایرکتوری خانگی کاربر را پیدا می کند. برای این من از ()os.environ.get کمک گرفته ام. همچنین شما می توانید دستی مسیر دایرکتوری خانگی یا هر مسیر دیگری را برای initialdir بفرستید. در دومین کد، به کمک ()getcwd از ماژول os دایرکتوری جاری (CWD – Current Work Directory) را برای initialdir آماده کنید.

در شکل زیر می توانید مفهوم نخستین المان های تاپل های درونی در پارامتر filetypes را ببینید که آنها همان فیلترها (Filters) در پنجره FileDialog باز شده را نشان می دهند. در شکل زیر می بینید که ما سه دسته فیلتر داشتیم که اگر All Files را برگزینیم، چون فیلتر آن *.* بوده، پس همه فایل ها نشان داده می شود ولی اگر PNG Files را برگزینیم، چون فیلتر آن png.* بوده، پس همه فایل ها با پسوند png. نمایش داده می شوند.

کد زیر نمونه مثالی ساده را نشان می دهد که در آن می خواهیم با فشرده شدن دگمه، متد ()askopenfilename باز شود تا بتوانیم تنها از میان دو گروه (و نه همه فایل ها) پسوندهای txt. و rtf. (در مکینتاش) را برگزینیم. بنابراین پارامتر filetypes تنها در برگیرنده همین دو فیلتر txt.* و rtf.* است. سپس درون تابع ()select_text و به کمک تابع ()open فایل برگزیده شده را باز کرده و همه درون مایه آن به کمک متد ()insert از کلاس ویجت Text و به کمک اندیس گذاری END به درون ویجت Text ریخته می شود که می توانید در شکل زیر ببینید.

در اینجا و بر پایه نیاز، تنها متد ()askopenfilename گفته شد ول دیگر متدها در tkinter.filedialog هستند که نوشته های پیش رو خواهیم گفت. همچنین شما می توانید کد این نوشته را از اینجا دریافت کنید.