2012-07-04 44 views
3

我有以下輸入框,其中由於獲取值,我已經爲textvariable放置了一個列表選項。默認文本以及列表文本變量條目控件Tkinter

但是我想知道是否可以在背景中放置默認文本,以顯示每個框中需要哪些值(如灰度文本,「值1」,「值2」等)。

self.numbers = [StringVar() for i in xrange(self.number_boxes) ] #Name available in global scope.  
box=Entry(self.frame_table,bg='white',borderwidth=0, width=10, justify="center", textvariable=self.numbers[i]) 

能在或許真的變「textvariable」在鼠標點擊盒子裏面添加或可我只是簡單地添加在另一個textvariable或文本設置一個默認的文本?

self.box = [] 

    for i in xrange(self.number_boxes): 

     self.clicked = False 
     self.box.append(Entry(self.frame_table,bg='white',borderwidth=0, width=10, justify="center", textvariable=self.numbers[i], fg='grey')) 
     self.box[i].grid(row=row_list,column=column+i, sticky='nsew', padx=1, pady=1) 
     self.box[i].insert(0, "Value %g" % float(i+1)) 
     self.box[i].bind("<Button-1>", self.callback) 
+0

謝謝。儘管我不能用包或網格列表。 = S – user2063

+0

好吧,我明白了,但它似乎只能在回調中的第一個框中使用。我不能使用box [i]與追加行,其他都可以。我得到同樣的錯誤,追加'列表超出範圍'。 – user2063

+0

您將不得不學習lamba函數,以便您可以將'i'傳遞給回調函數。回調將更改爲接受'i'作爲輸入參數:'回調函數定義中的def callback(event,i):'和回調主體中的'box [i]'。搜索stackoverflow的lamba函數的例子。祝你好運。 – gary

回答

4

爲了把默認的文字在你的Entry小部件,您所描述的here可以使用insert()方法。

box.insert(0, "Value 1") # Set default text at cursor position 0. 

現在爲了改變box內容的用戶進行箱內用鼠標點擊後,您將需要綁定一個事件Entry對象。例如,以下代碼在單擊時刪除該框的內容。 (你可以閱讀關於事件和綁定here。)下面我顯示了一個完整的例子。

請注意,刪除框中的文本可能僅適用於第一次點擊(即刪除默認內容時),因此我創建了一個全局標誌clicked以跟蹤它是否已被點擊。

from tkinter import Tk, Entry, END # Python3. For Python2.x, import Tkinter. 

# Use this as a flag to indicate if the box was clicked. 
global clicked 
clicked = False 

# Delete the contents of the Entry widget. Use the flag 
# so that this only happens the first time. 
def callback(event): 
    global clicked 
    if (clicked == False): 
     box[0].delete(0, END)   # 
     box[0].config(fg = "black") # Change the colour of the text here. 
     clicked = True 

root = Tk() 
box = []        # Declare a list for the Entry widgets. 

box.append(Entry(fg = "gray"))  # Create an Entry box with gray text. 
box[0].bind("<Button-1>", callback) # Bind a mouse-click to the callback function. 
box[0].insert(0, "Value 1")   # Set default text at cursor position 0. 

box.append(Entry(fg = "gray"))  # Make a 2nd Entry; store a reference to it in box. 
box[1].insert(0, "Value 2") 

box[0].pack()       # 
box[1].pack() 

if __name__ == "__main__": 
    root.mainloop() 
+0

謝謝!這將與我的其他輸入'textvariable'一起使用嗎?我可以在刪除回調中的內容後插入box [「textvariable」] = self.numbers [i]還是不行? – user2063

+0

另外我正在使用網格,因爲我已經將它集成到我的代碼中,但是當我在框中單擊時沒有任何反應。我一直在使用課堂和自我。所以我用self.box。 textvariable仍然似乎工作。同樣在回調中,我可以簡單地將插入文本的顏色改回黑色嗎? – user2063

+0

我已經設法在課堂上糾正它,它像一個普通的實例self.clicked。然而,我有這樣的問題,我用循環創建了幾個輸入框,它隻影響最後一個=(你不知道我會如何創建'獨立'框? – user2063