首页 > 解决方案 > 当点击离开时,将空的 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])

我怎么能做到这一点?非常感谢。

标签: pythontkinter

解决方案


只需将 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()

推荐阅读