0

I have a question about code from this post filedialog, tkinter and opening files

I want to implement this into my own code but when i run this (without my code, just the code you see) all the folders that show up are empty and I can't actually open anything.

from tkinter import *
from tkinter.filedialog import askopenfilename
from tkinter.messagebox import showerror

class MyFrame(Frame):
    def __init__(self):
        Frame.__init__(self)
        self.master.title("Example")
        self.master.rowconfigure(5, weight=1)
        self.master.columnconfigure(5, weight=1)
        self.grid(sticky=W+E+N+S)

        self.button = Button(self, text="Browse", command=self.load_file, width=10)
        self.button.grid(row=1, column=0, sticky=W)

    def load_file(self):
        fname = askopenfilename(filetypes=(("Template files", "*.tplate"),
                                           ("HTML files", "*.html;*.htm"),
                                           ("Python file", "*.py"),
                                           ("All files", "*.*") ))
        if fname:
            try:
                print("""here it comes: self.settings["template"].set(fname)""")
            except:                     # <- naked except is a bad idea
                showerror("Open Source File", "Failed to read file\n'%s'" % fname)
            return


if __name__ == "__main__":
    MyFrame().mainloop()
eliza.b
  • 447
  • 1
  • 8
  • 16
  • 3
    Have you selected `All files` in your open dialog? Place it in the beginning of your `filetypes` list to make it the default. – zwer Jul 27 '17 at 16:56
  • Thank you! placing `All Files` at the beginning fixed the problem. @zwer – eliza.b Jul 27 '17 at 17:21

1 Answers1

1

Your code is running well, i assume what you want to understand is how the filetype is used in the example.

With the list of types provided (it's a tuple actually) the browse dialog is looking in priority for files with a .tplate extension. Then, you can change this option in the dropdown listbox to select html, python or any type of file.

fname = askopenfilename(filetypes=(("Template files", "*.tplate"),
                                   ("HTML files", "*.html;*.htm"),
                                   ("Python file", "*.py"),
                                   ("All files", "*.*") ))

If you change the order of the tuple provided, you can select another type first,

fname = askopenfilename(filetypes=(("Python file", "*.py"),
                                   ("HTML files", "*.html;*.htm"),
                                   ("All files", "*.*") ))

Check this doc for more details on the options.

PRMoureu
  • 12,817
  • 6
  • 38
  • 48