Reputation: 922
When I run this code, the file picker comes up, and then when I finish with it, I can't type in the entry widget until I focus on another window and then come back. Why is this happening?
import tkinter as tk
from tkinter.filedialog import askopenfilename
location = ''
start = tk.Tk()
tk.Label(text='What is the name of your table?').pack()
box = tk.Entry(start, exportselection=0, state=tk.DISABLED)
box.pack()
button = tk.Button(start, text='OK', command=lambda e: None)
button.pack()
location = askopenfilename(defaultextension='.db',
title="Choose your database",
filetypes=[('Database Files', '.db'), ('All files', '*')])
box.config(state=tk.NORMAL)
start.mainloop()
Upvotes: 5
Views: 2645
Reputation: 49
You need to follow 2 steps:
box.focus_force()
below box.pack()
.location = askopenfilename(blah blah..)
and paste it after start = tk.Tk()
You will be good to go!
Upvotes: 0
Reputation: 422
You just write box.focus_force()
below box.pack()
and that should do the work for you.
Upvotes: 2
Reputation: 897
This should fix it
import tkinter as tk
from tkinter.filedialog import askopenfilename
location = ''
root = tk.Tk()
root.withdraw()
location = askopenfilename(defaultextension='.db', title="Choose your database", filetypes=[('Database Files', '.db'), ('All files', '*')])
start = tk.Tk()
tk.Label(start, text='What is the name of your table?').pack()
box = tk.Entry(start, exportselection=0, state=tk.DISABLED)
box.pack()
start.focus_set()
box.focus_set()
start.focus_force()
button = tk.Button(start, text='OK', command=lambda e: None)
button.pack()
box.config(state=tk.NORMAL)
start.mainloop()
By running the askopenfilename
first you can avoid this issue.
In doing it this way you need to make a root
window and withdraw it or you will get two windows.
By using focus_set
and focus_force
you can make the box immediately ready to use.
Upvotes: -1