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。这并不能解决这个问题。我正在做类似的事情,这仍然给我带来麻烦。你还有别的想法吗?