如何在tkinter GUI中的条目中添加文本,然后在用户与小部件交互时消失?

时间:2016-09-15 18:24:00

标签: python-3.x tkinter

所以我使用tkinter python,我有一个带有Name文本的条目小部件。我想仅在单击小部件时删除文本。这就是我到目前为止所做的:

#Import tkinter to make gui
from tkinter import *
from tkinter import ttk#Sets title and creates gui
root = Tk()
root.title("Identity Form")

#Configures column and row settings and sets padding
mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

name=StringVar()
age=StringVar()
gender=StringVar()
#Widgets to put in items, quanitity, and shipping days
name_entry = ttk.Entry(mainframe, width=20, textvariable=name)
name_entry.grid(column=2, row=2, sticky=(W, E))

age_entry2 = ttk.Entry(mainframe, width=20, textvariable=age)
age_entry2.grid(column=2, row=3, sticky=(W, E))

male = ttk.Radiobutton(mainframe, text='Male', variable=gender, value='male')
female = ttk.Radiobutton(mainframe, text='Female', variable=gender, value='female')
other = ttk.Radiobutton(mainframe, text='Other', variable=gender, value='other')

name_entry.insert(0,'Name')

这将创建条目小部件,并具有文本" Name"在里面。当点击我希望文本消失时。

2 个答案:

答案 0 :(得分:0)

def reset(*args):
    name_entry.delete(0, END)

name_entry.bind("<Button-1>", reset)

看起来解决方案很简单,我找到了它的一个变体,但我不知道有必要使用* args或者它不会起作用。

答案 1 :(得分:0)

您可以通过绑定将name变量的值设置为空字符串的方法来实现。

def reset(event):
    name.set("")

name_entry.bind("<Button-1>", reset)

如果只想删除name_entry中的文本,则可以添加一个if条件,仅在name的值等于原始值时设置名称。

def reset(event):
    if name.get() == initial_text:
        name.set("")

我希望我的回答会有所帮助。