python - 当点击离开时,将空的 tk 输入框返回到以前的状态
问题描述
我目前正在开发我的第一个 python 程序,一个使用 tkinter 的预订系统。我有一个使用多个输入框的客户帐户创建屏幕。单击输入框时,将调用以下键绑定以清除其指令的输入框(即“输入名称”)
def entry_click(event):
if "enter" in event.widget.get():
event.widget.delete(0, "end")
event.widget.insert(0, "")
event.widget.configure(fg="white")
#example Entry fields
new_name = Entry(root)
new_name.insert(0, "enter name")
new_name.bind('<FocusIn>', entry_click)
new_name.bind('<FocusOut>', entry_focusout)
new_email = Entry(root)
new_email.insert(0, "enter email")
new_email.bind('<FocusIn>', entry_click)
new_email.bind('<FocusOut>', entry_focusout)
以类似的方式,我正在寻找一种创建通用事件的方法,如果该框为空,则该唯一输入字段的适当文本将返回其初始状态(即“输入名字”或“输入电子邮件”)当点击远离。
def entry_focusout():
if not event.widget.get():
event.widget.insert(fg="grey")
event.widget.insert(0, #[appropriate text here])
我怎么能做到这一点?非常感谢。
解决方案
只需将 arg 添加到您的事件并使用 lambda 函数entry_focusout
绑定到小部件。Entry
from tkinter import *
root = Tk()
def entry_click(event):
if event.widget["foreground"] == "grey":
event.widget.delete(0, "end")
event.widget.insert(0, "")
event.widget.configure(fg="black")
def entry_focusout(event, msg):
if not event.widget.get():
event.widget.configure(fg="grey") #you had a typo here
event.widget.insert(0, msg)
new_name = Entry(root,fg="grey")
new_name.insert(0, "enter name")
new_name.bind('<FocusIn>', entry_click)
new_name.bind('<FocusOut>', lambda e: entry_focusout(e, "enter name"))
new_email = Entry(root,fg="grey")
new_email.insert(0, "enter email")
new_email.bind('<FocusIn>', entry_click)
new_email.bind('<FocusOut>', lambda e: entry_focusout(e, "enter email"))
new_name.pack()
new_email.pack()
root.mainloop()
推荐阅读
- java - 将 PaymentMethods 从平台克隆到关联账户
- ms-access - 粘贴追加粘贴空白单元格
- tree - 线性时间的 MST,边权重 {1 到 100}
- selenium - 从 Windows 计划任务以 SYSTEM 用户身份执行 Selenium 失败的原因
- r - 使用简单的 for 循环将状态名称与相应的状态编号匹配
- javascript - 使用“createElement”创建按钮时执行按钮的 onclick 属性
- openmdao - 衍生品警告没有意义
- mysql - 使用空间数据查询慢,如何加快
- java - 需要链接 private_key.pem 和 chain.crt
- winapi - 调用 GetDIBits() 成功,但程序终止