I’m putting the finishing touches on a side project at work that requires opening a file as an argument at the command line, or through a file open dialog box. Here’s a snippet that demonstrates how I implemented it.
import sys
import os
def choose_file():
try:
import Tkinter, tkFileDialog
except ImportError:
print "Tkinter not installed."
exit()
#Suppress the Tkinter root window
tkroot = Tkinter.Tk()
tkroot.withdraw()
return str(tkFileDialog.askopenfilename())
if __name__ == "__main__":
#If no file is passed at the command line, or if the file
#passed can not be found, open a file chooser window.
if len(sys.argv) < 2:
filename = os.path.abspath(choose_file())
else:
filename = os.path.abspath(sys.argv[1])
if not os.path.isfile(filename):
filename = choose_file()
#Now you have a valid file in filename
It’s pretty straightforward. If no file is passed at the command line, or if the file passed at the command line isn’t a legitimate file, a file chooser dialog box pops up. If Tkinter isn’t installed, it bails out with an error message.
The bit about suppressing the Tk root window prevents a small box from appearing alongside the file chooser dialog box.