python3 tkinter Entry()无法选择文本字段,直到我在应用程序窗口外部单击一次

时间:2018-08-21 20:52:06

标签: python-3.x tkinter tkinter-entry

我用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创建的新应用程序窗口有关,但我找不到答案。

感谢您的答复!

1 个答案:

答案 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)