将函数绑定到Tkinter文本输入字段

2024-09-26 22:53:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用TKinter做一个通讯录。我有“姓名、年龄、电话等”的输入字段,每个字段内都有文本表示每个字段是什么。因此在名称输入字段中,它显示“输入名称”。我想要的是,当有人在名称输入字段中单击开始键入时,它会删除当前在其中的文本。我知道我需要创建一个函数来清除这个条目,然后将它绑定到条目字段,但是我被卡住了。在

您可以看到我试图在底部对'def clearEvent'做什么,并尝试将其绑定到TextField。我的问题是def clearEvent函数低于其他所有函数而需要位于顶部吗?还是我犯了别的错误?在

from Tkinter import *
import sqlite3

class Hello():
    def __init__(self, master):

        frame=Frame(master, width=80, height=50)
        frame.pack()
        self.text = Label(frame, text="               ")
        self.text.pack()
        self.text.grid(row=0, sticky=W)

        self.lab = Label(frame, text="name")
        self.lab.pack(side=LEFT)
        self.lab.grid(row=1)

        self.TextField = Entry(frame, text = "name", width=30)
        self.TextField.insert(0, "Enter Name")
        self.TextField.pack()
        self.TextField.grid(row=1)
        self.TextField.bind("<Enter>", clearEvent)

        self.TextField2 = Entry(frame, text = "age", width=30)
        self.TextField2.insert(0, "Enter Age")
        self.TextField2.pack()
        self.TextField2.grid(row=2)

        self.TextField3 = Entry(frame, text = "phone", width=30)
        self.TextField3.insert(0, "Enter Phone #")
        self.TextField3.pack()
        self.TextField3.grid(row=3)

        self.TextField4 = Entry(frame, text = "fblink", width=30)
        self.TextField4.insert(0, "Enter Facebook Link")
        self.TextField4.pack()
        self.TextField4.grid(row=4)

        self.btn=Button(frame, text='Add', command=self.add_note)
        self.btn.pack()
        self.btn.grid(row=5, rowspan=1, sticky="w")

        self.showbtn = Button(frame, text='Update', command=self.show_notes)
        self.showbtn.pack()
        self.showbtn.grid(row=5, rowspan=1, sticky="")

        self.delbtn = Button(frame, text='Delete', command=self.del_notes)
        self.delbtn.pack()
        self.delbtn.grid(row=5, rowspan=1, sticky="e")


        self.content=Listbox(master, width=50)
        self.content.pack()

    def clearEvent(self, event):
        self.TextField.delete(0,END)

Tags: textselfdefwidthframepackgridrow
2条回答

您用回车键而不是鼠标点击来绑定文本字段。 其他一切似乎都很好

当鼠标进入小部件时,<Enter>事件被触发。你说你想在用户点击widget时清除它,这是一个不同的事件。您应该绑定到<1>,当用户单击小部件中的鼠标左键时,它将触发。更好的是,绑定到<FocusIn>事件,无论是通过单击还是用户按tab键,只要焦点移动到该小部件上,它就会触发。在

不过,我想你会意识到这不会给用户带来好的体验。如果他们填写了表格,然后意识到他们在其中一个字段中犯了拼写错误,会怎么样?他们在字段中单击以编辑它,然后爆炸!不管是什么都不见了,他们必须重新输入整个字段。在

你应该重新考虑一下这个计划。例如,当有占位符文本时,您可能希望前景颜色为浅灰色。然后,在函数中,首先检查颜色。如果是黑色的,什么也不做。它是浅灰色,删除文本,然后确保将颜色设置为黑色,这样下次用户单击时,文本不会被删除。在

相关问题 更多 >

    热门问题