2015-01-07 75 views
5

2つのエントリフィールドを持つtkinterのログインウィンドウを作成しました。最初はユーザー名、もう1つはパスワードです。
コードtkinterのエントリにプレースホルダを追加する方法は?

from tkinter import * 

ui = Tk() 

e1 = Entry(ui) 
#i need a placeholder "Username" in the above entry field 
e1.pack() 

ui.mainloop() 

私はEntryで「ユーザー名」と呼ばれるプレースホルダをしたいが、あなたは内側をクリックした場合、テキストが消えるはずです。

+0

郵便コードをしてください。 –

+0

何を試しましたか? Stackoverflowはコード作成サービスではありません。 –

+0

私の答えが役に立ったら、それを受け入れることを忘れないでください。 :) –

答えて

5

このエントリのデフォルト値を設定する必要があります。このように:あなたは、エントリをクリックしたときにコンテンツを削除したい場合は

from tkinter import * 

ui = Tk() 

e1 = Entry(ui) 
e1.insert(0, 'username') 
e1.pack() 

ui.mainloop() 

その後、あなたはこのエントリの内容を更新するために、イベントハンドラメソッドでマウスクリックイベントをバインドする必要があります。 ここにはlinkがあります。

+5

クリックにバインドする代わりに、キーボードで入力ウィジェットにフォーカスを切り替えることができるので、 ' 'にバインドする必要があります。あなたが実際にそれを行う方法を示したらあなたの答えは少し良くなるでしょう。 –

+0

ブライアンの提案に基づいて、将来の読者のためのシンプルなライナーがあります: 'e1.bind(" "、ラムダargs:e1.delete( '0'、 'end'))'。 – Nae

+0

@Nae ** lambda argsについてこれを説明できますか:**わかりやすかったです –

2

あなたは以下のようにEntryを継承するクラスを作成することができます

import tkinter as tk 

class EntryWithPlaceholder(tk.Entry): 
    def __init__(self, master=None, placeholder="PLACEHOLDER", color='grey'): 
     super().__init__(master) 

     self.placeholder = placeholder 
     self.placeholder_color = color 
     self.default_fg_color = self['fg'] 

     self.bind("<FocusIn>", self.foc_in) 
     self.bind("<FocusOut>", self.foc_out) 

     self.put_placeholder() 

    def put_placeholder(self): 
     self.insert(0, self.placeholder) 
     self['fg'] = self.placeholder_color 

    def foc_in(self, *args): 
     if self['fg'] == self.placeholder_color: 
      self.delete('0', 'end') 
      self['fg'] = self.default_fg_color 

    def foc_out(self, *args): 
     if not self.get(): 
      self.put_placeholder() 

if __name__ == "__main__": 
    root = tk.Tk() 

    username = EntryWithPlaceholder(root, "username") 
    password = EntryWithPlaceholder(root, "password", 'blue') 
    username.pack() 
    password.pack() 
    root.mainloop() 
+0

これは、bindtags、bind_classとともに使用するカスタムクラスタグを定義することでさらに改善できます。 – Nae

関連する問題