Ds *_*jun 4 python tkinter python-2.7 python-3.x tkinter-entry
如何在tkinter Entry
小部件中插入临时文本?
例如,我有一个Label User
,旁边有一个Entry小部件,它应该"Enter your username..."
在应用程序的开头有一些文本,并且在将游标放在Entry小部件上时,它应该删除"Enter your username..."
并允许用户输入数据.
这是我目前的代码:
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()
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我没有找到任何选项或方法来删除将游标放在Entry小部件上的数据.
我想在没有说过的回复中添加一些内容.正如9jera所说,我们只有在看到默认文本而不是Leo Tenenbaum使用的"firstclick"方法时才能使Entry小部件清晰.
如果用户将焦点转移到另一个小部件而不键入任何内容,我们还可以添加第二个函数来重新填充Entry小部件.
这可以通过以下方式实现:
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()
Run Code Online (Sandbox Code Playgroud)
最后,我还为默认文本添加了灰色,并将黑色添加到用户编写的文本中,只是对于那些想知道这一点的人.我在这里看到的唯一问题是,如果用户实际上在那里手动输入,则Enter your user name...
重点关注,即使文本是由用户自己编写的,也会删除文本.我想到的一个解决方案是更改if语句,以便在删除任何内容之前获取颜色而不是默认文本.如果颜色为灰色,则可以继续并删除它.否则,它不会.然而,我还没有找到获得文字颜色的方法.如果有人知道这件事,请告诉我!
编辑:显然,正如Olivier Samson指出的那样,可以通过使用来获得条目的颜色entry.cget('fg')
.我猜,2年后,我终于弄清楚如何做到这一点.
因此,我们现在可以将行更改if entry.get() == 'Enter your user name...':
为if entry.cget('fg') == 'grey':
.这样,无论何时第一次点击条目并在其中输入任何内容,颜色都会变为黑色,因此下次用户聚焦时,它将不会删除任何文本(即使该文本是Enter your user name...
).
归档时间: |
|
查看次数: |
12863 次 |
最近记录: |