Python 如何在tkinter条目小部件中插入临时文本?

Python 如何在tkinter条目小部件中插入临时文本?,python,python-2.7,python-3.x,tkinter,tkinter-entry,Python,Python 2.7,Python 3.x,Tkinter,Tkinter Entry,如何在tkinter条目小部件中插入临时文本 例如,我有一个标签User,旁边有一个条目小部件,在应用程序的开头应该有一些文本“输入您的用户名…”,当将光标放在条目小部件上时,它应该删除“输入您的用户名…”,并允许用户输入数据 这是我当前的代码: import tkinter as tk root = tk.Tk() label = tk.Label(root, text="User:") label.pack() entry = tk.Entry(root, bd=1, show="Ent

如何在tkinter
条目
小部件中插入临时文本

例如,我有一个标签
User
,旁边有一个条目小部件,在应用程序的开头应该有一些文本
“输入您的用户名…”
,当将光标放在条目小部件上时,它应该删除
“输入您的用户名…”
,并允许用户输入数据

这是我当前的代码:

import tkinter as tk

root = tk.Tk()

label = tk.Label(root, text="User:")
label.pack()
entry = tk.Entry(root, bd=1, show="Enter your user name...")
entry.pack()

root.mainloop()
我该怎么做


在将光标放在条目小部件上时,我没有找到任何选项或方法来删除数据

我认为这应该行得通:

import Tkinter as tk


firstclick = True

def on_entry_click(event):
    """function that gets called whenever entry1 is clicked"""        
    global firstclick

    if firstclick: # if this is the first time they clicked it
        firstclick = False
        entry.delete(0, "end") # delete all the text in the entry


root = tk.Tk()

label = tk.Label(root, text="User: ")
label.pack(side="left")

entry = tk.Entry(root, bd=1)
entry.insert(0, 'Enter your user name...')
entry.bind('<FocusIn>', on_entry_click)
entry.pack(side="left")

root.mainloop()
将Tkinter作为tk导入
firstclick=True
进入时的def单击(事件):
“”“每当单击entry1时调用的函数”“”
全局首次单击
如果第一次点击:#如果这是他们第一次点击它
firstclick=False
条目。删除(0,“结束”)#删除条目中的所有文本
root=tk.tk()
label=tk.label(root,text=“User:”)
标签包装(侧边=“左”)
entry=tk.entry(根,bd=1)
entry.insert(0,“输入您的用户名…”)
条目.bind(“”,点击条目)
入口包装(侧边=“左”)
root.mainloop()

当用户单击Leo's code
条目中的条目时,这将删除
输入您的用户名…

,删除
应更改为
条目。删除

此外,代码中的条目小部件仅在第一次单击时清除,但只有在将条目小部件设置为默认文本时,才能清除条目小部件。如果代码必须重复,这可能会很有帮助

试试这个:

import Tkinter as tk


def on_entry_click(event):
    """function that gets called whenever entry is clicked"""
    if entry.get() == 'Enter your user name...':
       entry.delete(0, "end") # delete all the text in the entry
       entry.insert(0, '') #Insert blank for user input


root = tk.Tk()

label = tk.Label(root, text="User: ")
label.pack(side="left")

entry = tk.Entry(root, bd=1)
entry.insert(0, 'Enter your user name...')
entry.bind('<FocusIn>', on_entry_click)
entry.pack(side="left")

root.mainloop()
将Tkinter作为tk导入
进入时的def单击(事件):
“”“每当单击条目时调用的函数”“”
如果entry.get()=“输入您的用户名…”:
条目。删除(0,“结束”)#删除条目中的所有文本
条目。插入(0),#为用户输入插入空白
root=tk.tk()
label=tk.label(root,text=“User:”)
标签包装(侧边=“左”)
entry=tk.entry(根,bd=1)
entry.insert(0,“输入您的用户名…”)
条目.bind(“”,点击条目)
入口包装(侧边=“左”)
root.mainloop()

我想在回答中添加一些尚未提及的内容。如前所述,只有当条目小部件看到默认文本而不是用户使用的“firstclick”方法时,我们才能使条目小部件变得清晰

如果用户没有输入任何内容就将焦点转到另一个小部件,我们还可以添加第二个函数来重新填充条目小部件

这可以通过以下方式实现:

import Tkinter as tk


def on_entry_click(event):
    """function that gets called whenever entry is clicked"""
    if entry.get() == 'Enter your user name...':
       entry.delete(0, "end") # delete all the text in the entry
       entry.insert(0, '') #Insert blank for user input
       entry.config(fg = 'black')
def on_focusout(event):
    if entry.get() == '':
        entry.insert(0, 'Enter your username...')
        entry.config(fg = 'grey')


root = tk.Tk()

label = tk.Label(root, text="User: ")
label.pack(side="left")

entry = tk.Entry(root, bd=1)
entry.insert(0, 'Enter your user name...')
entry.bind('<FocusIn>', on_entry_click)
entry.bind('<FocusOut>', on_focusout)
entry.config(fg = 'grey')
entry.pack(side="left")

root.mainloop()
将Tkinter作为tk导入
进入时的def单击(事件):
“”“每当单击条目时调用的函数”“”
如果entry.get()=“输入您的用户名…”:
条目。删除(0,“结束”)#删除条目中的所有文本
条目。插入(0),#为用户输入插入空白
entry.config(fg='black')
def on_focusout(事件):
如果条目.get()='':
entry.insert(0,“输入您的用户名…”)
entry.config(fg='grey')
root=tk.tk()
label=tk.label(root,text=“User:”)
标签包装(侧边=“左”)
entry=tk.entry(根,bd=1)
entry.insert(0,“输入您的用户名…”)
条目.bind(“”,点击条目)
entry.bind(“”,on_focusout)
entry.config(fg='grey')
入口包装(侧边=“左”)
root.mainloop()
最后,我还在默认文本中添加了灰色,在用户编写的文本中添加了黑色,这只是为了任何对此感到疑惑的人。我在这里看到的唯一问题是,如果用户实际上在那里手动键入
输入您的用户名…
,然后向外和向内聚焦,则文本将被删除,即使它是由用户自己编写的。我想到的一个解决方案是更改if语句,以便在删除任何内容之前获取颜色而不是默认文本。如果颜色为灰色,则可以继续删除它。否则,它不会。然而,我还没有找到一种方法来获得文本的颜色。如果有人知道这件事,请告诉我

编辑:显然,正如前面所指出的,通过使用
entry.cget('fg')
可以获得条目的颜色。我想,两年后,我终于想出了如何做到这一点


因此,我们现在可以将行
if entry.get()=“输入您的用户名…”:
更改为
if entry.cget('fg')=“grey”:
。这样,每当第一次单击条目并在其中键入任何内容时,颜色都会变为黑色,因此下次用户聚焦时,它不会删除任何文本(即使该文本是
输入您的用户名…
)。

重复?您没有找到任何选项或方法来删除数据或将光标放在文本框中吗?你在哪里找的?在很多地方都有记录(例如:,),如果他们使用tab键将焦点移动到entrt,这将不起作用。最好绑定
以获取条目文本颜色,您可以使用cget:
entry.cget('fg')
if entry.get()=''''''如果entry.get()''这个条件很危险,应该是这样=>if len(entry.get())-entry.get().count(''')知道只有空格的字符