0

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)
4

2 に答える 2

0

<Enter>マウスがウィジェットに入ると、イベントが発生します。ユーザーがウィジェットをクリックしたときにそれをクリアしたいと言っていましたが、これは別のイベントです。<1>ユーザーがウィジェットでマウスの左ボタンをクリックすると起動する にバインドする必要があります。さらに良いことに、イベントにバインドし<FocusIn>ます。これは、クリックまたはユーザーがタブを押すことによって、フォーカスがそのウィジェットに移動するたびに発生します。

ただし、これではユーザーに良いエクスペリエンスが提供されないことに気付くと思います。フォームに記入した後、フィールドの 1 つでスペルミスをしたことに気付いたらどうしますか? フィールドをクリックして編集すると、ブーム! そこにあったものはすべてなくなり、フィールド全体を再入力する必要があります。

この計画を再考する必要があるかもしれません。たとえば、プレースホルダー テキストがある場合、前景色をライト グレーにすることができます。次に、関数で最初に色が何であるかを確認します。黒なら何もしない。ライト グレーです。テキストを削除してから、色を必ず黒に設定してください。これにより、ユーザーが次にクリックしたときにテキストが削除されなくなります。

于 2013-11-01T10:57:21.673 に答える