Pouria
Pouria

Reputation: 193

tkinter askopenfilename() function can't be used multiple times

I'm trying to run this function as long as entry is 1 or 2. but after the first valid input (1 or 2) the second one doesn't do anything and seems to get stuck in the loop

(the function prints the chosen file name + the input number)

from tkinter import Tk
from tkinter.filedialog import askopenfilename
Tk().withdraw() # there's no need to open the full GUI

def my_filebrowser(command):
    filename = askopenfilename()
    print(filename, command)

while True:

    command = int(input('enter command: '))

    if command == 1:
        my_filebrowser(command)

    elif command == 2:
        my_filebrowser(command)

    else:
        break

how should I change the code in order to use the tkinter file browser (askopenfilename() function) multiple times?

Upvotes: 1

Views: 971

Answers (1)

Thingamabobs
Thingamabobs

Reputation: 8037

You could simply create and destroy the root window to achive that, but it isnt a high performance approach.

from tkinter import Tk
from tkinter.filedialog import askopenfilename


def my_filebrowser(command):
    root = Tk(); root.withdraw()
    filename = askopenfilename()
    print(filename, command)
    root.destroy()

while True:

    command = int(input('enter command: '))

    if command == 1:
        my_filebrowser(command)

    elif command == 2:
        my_filebrowser(command)

    else:
        break

You can modify this code to have the filedialog in the front and in the middle of the screen. I also added alpha for transparency that you dosent even notice what happens:

def my_filebrowser(command):
    root = Tk(); root.attributes('-alpha',0.01)
    root.attributes('-topmost',True)
    root.tk.eval(f'tk::PlaceWindow {root._w} center')
    root.withdraw()
    filename = askopenfilename()
    root.destroy()
    print(filename, command)  

Upvotes: 1

Related Questions