2015-05-27 87 views
2

如何在tkinter Entry小部件中插入臨時文本?如何在tkinter Entry小部件中插入臨時文本?

例如,我有一個標籤User和它旁邊的我應該在應用程序的開頭有一些文字"Enter your username..."條目小部件,並同時把光標放在輸入構件,它應該刪除"Enter your username...",並允許用戶輸入數據。

這是我當前的代碼:

import tkinter as tk 

root = tk.Tk() 

label = tk.Label(root, text="User:") 
label.pack() 
entry = tk.Entry(root, bd=1, show="Enter your user name...") 
entry.pack() 

root.mainloop() 

我怎麼能這樣做?

我沒有找到任何選項或方法來刪除將光標放在Entry小部件上的數據。

+1

Duplicate http://stackoverflow.com/questions/27820178/how-to-add-placeholder-in-a-text-field-in-tkinter? –

+0

您沒有找到任何選項或方法來刪除數據或將光標放在文本框中?你看起來在哪裏?它記錄在許多地方(例如:http://effbot.org/tkinterbook/entry.htm#Tkinter.Entry.insert-method,http://effbot.org/tkinterbook/entry.htm#Tkinter.Entry.delete-方法) –

回答

1

我想添加一些尚未表示響應。正如9jera所說,我們可以只在看到默認文本而不是Leo Tenenbaum使用的「firstclick」方法時才使Entry小部件清除。

如果用戶將焦點轉到另一個小部件而不輸入任何內容,我們還可以添加第二個函數來重新填充Entry小部件。

這可以如下實現:

import Tkinter as tk 


def on_entry_click(event): 
    """function that gets called whenever entry is clicked""" 
    if entry.get() == 'Enter your user name...': 
     entry.delete(0, "end") # delete all the text in the entry 
     entry.insert(0, '') #Insert blank for user input 
     entry.config(fg = 'black') 
def on_focusout(event): 
    if entry.get() == '': 
     entry.insert(0, 'Enter your username...') 
     entry.config(fg = 'grey') 


root = tk.Tk() 

label = tk.Label(root, text="User: ") 
label.pack(side="left") 

entry = tk.Entry(root, bd=1) 
entry.insert(0, 'Enter your user name...') 
entry.bind('<FocusIn>', on_entry_click) 
entry.bind('<FocusOut>', on_focusout) 
entry.config(fg = 'grey') 
entry.pack(side="left") 

root.mainloop() 

最後,我還添加了灰色以默認的文本和黑色到一個用戶編寫,只是任何人,不知道這一點。我在這裏看到的唯一問題是,如果用戶實際上手動鍵入Enter your user name...,則會重新集中,即使用戶自己寫入文本,文本也會被刪除。我想到的一個解決方案是更改if語句,以便在刪除任何內容之前獲取顏色而不是默認文本。如果顏色爲灰色,則可以繼續並將其刪除。否則,它不會。但是,我還沒有找到獲取文本顏色的方法。如果有人知道這件事,請告訴我!

3

我認爲這應該工作:

import Tkinter as tk 


firstclick = True 

def on_entry_click(event): 
    """function that gets called whenever entry1 is clicked"""   
    global firstclick 

    if firstclick: # if this is the first time they clicked it 
     firstclick = False 
     entry.delete(0, "end") # delete all the text in the entry 


root = tk.Tk() 

label = tk.Label(root, text="User: ") 
label.pack(side="left") 

entry = tk.Entry(root, bd=1) 
entry.insert(0, 'Enter your user name...') 
entry.bind('<FocusIn>', on_entry_click) 
entry.pack(side="left") 

root.mainloop() 

當用戶點擊進入entry這將刪除Enter your user name...

+2

如果他們使用Tab鍵將焦點移動到entrt,這將不起作用。最好綁定在'' –

+0

它的工作Leo Tenenbaum。謝謝。 –

0

從利奧的代碼entry1.delete應改爲entry.delete

此外,他的代碼中的Entry小部件僅在第一次單擊時清除,但只有在將其設置爲默認文本時,才能使Entry小部件清除。如果您的代碼必須重複,這可能會有所幫助。

試試這個:

import Tkinter as tk 


def on_entry_click(event): 
    """function that gets called whenever entry is clicked""" 
    if entry.get() == 'Enter your user name...': 
     entry.delete(0, "end") # delete all the text in the entry 
     entry.insert(0, '') #Insert blank for user input 


root = tk.Tk() 

label = tk.Label(root, text="User: ") 
label.pack(side="left") 

entry = tk.Entry(root, bd=1) 
entry.insert(0, 'Enter your user name...') 
entry.bind('<FocusIn>', on_entry_click) 
entry.pack(side="left") 

root.mainloop() 
相關問題