我用python3,tkinter编写了一个非常简单的应用程序,但是看到Entry()出现了一些奇怪的行为。我是tkinter和python的新手。
import os
from tkinter import Tk, Entry, filedialog
class MyGUI:
def __init__(self,master):
self.master = master
self.date_entry = Entry(master)
self.date_entry.pack()
self.date_entry.insert(0,"test")
self.master.mainloop()
root = Tk()
root.directory = os.path.abspath(filedialog.askdirectory())
my_gui = MyGUI(root)
运行此代码时,倒数第二行是引起以下问题的原因: 当我尝试编辑“测试”文本时,无法选择它(没有光标或任何东西)。但是,如果我在应用程序(例如桌面)上单击一次,则可以对其进行编辑。
有人知道这个问题可能是什么吗?
我想知道这是否与filedialog创建的新应用程序窗口有关,但我找不到答案。
感谢您的答复!
答案 0 :(得分:0)
在测试了这种奇怪的行为之后,似乎只要添加按钮以获取目录,问题就消失了。
但是我觉得很奇怪,我将看看是否能找到任何可以解释为什么tkinter如此行事的东西。
此代码应为您工作:
import tkinter as tk
from tkinter import filedialog
class MyGUI(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.date_entry = tk.Entry(self)
self.date_entry.pack()
self.date_entry.insert(0, "test")
self.directory = ""
tk.Button(self, text="Get Directory", command=self.get_directory).pack()
def get_directory(self):
self.directory = filedialog.askdirectory()
MyGUI().mainloop()
更新:
我最近了解到,在文件对话框之前添加update_idletasks()
将解决焦点问题。
更新的代码:
import os
from tkinter import Tk, Entry, filedialog
class MyGUI:
def __init__(self,master):
self.master = master
self.date_entry = Entry(master)
self.date_entry.pack()
self.date_entry.insert(0,"test")
self.master.mainloop()
root = Tk()
root.update_idletasks() # fix focus issue.
root.directory = os.path.abspath(filedialog.askdirectory())
my_gui = MyGUI(root)