Python中的Tkinter Entry组件无法编辑

5 投票
3 回答
2573 浏览
提问于 2025-04-18 15:49

当我运行这段代码时,文件选择器会弹出来。然后,当我用完它后,我发现无法在输入框里打字,直到我先点击其他窗口再回来。这是为什么呢?

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()

3 个回答

-1

这样做应该能解决问题

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_setfocus_force,你可以让这个对话框立刻可以使用。

0

你需要按照以下两个步骤操作:

  1. box.pack() 下面写上 box.focus_force()
  2. 把代码 location = askopenfilename(blah blah..) 剪切下来,粘贴到 start = tk.Tk() 之后。

这样就可以了!

2

你只需要在 box.pack() 下面写上 box.focus_force(),这样就可以了。

撰写回答