Python中的Tkinter条目小部件是不可编辑的

Python中的Tkinter条目小部件是不可编辑的,python,tkinter,tkinter-entry,filedialog,Python,Tkinter,Tkinter Entry,Filedialog,当我运行这段代码时,会出现文件选择器,当我完成它时,我无法输入条目小部件,直到我关注另一个窗口,然后返回。为什么会这样 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, exportselec

当我运行这段代码时,会出现文件选择器,当我完成它时,我无法输入条目小部件,直到我关注另一个窗口,然后返回。为什么会这样

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()
这应该可以解决它

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()
通过首先运行
askopenfilename
,可以避免此问题

这样做时,您需要创建一个
root
窗口并将其撤消,否则将得到两个窗口


通过使用
focus\u set
focus\u force
你可以让盒子立即准备好使用。

你只需在
box.pack()下面写
box.focus\u force()
,这应该可以帮你完成工作

你是在OSX上运行这个吗?我不知道为什么,但我想你可以先执行askopenfilename,然后启动mainloop…我不是在OSX上,我是在Windows 7和8.1上。我如何才能使主循环在askopenfilename窗口关闭之前不启动?在askopenfilename关闭之前不运行主循环几乎是不可能的,因为它总是需要一个根或主窗口,因此您可以创建一个临时窗口并执行root.draw()入口小部件可能是Python 2中的一个bug,所以我会考虑更新到Python 3,并使用TKTTER。这并不能解决这个问题。我正在做类似的事情,这仍然给我带来麻烦。你还有别的想法吗?