2017-06-15 59 views
2

我試圖設計與5條目窗口小部件(雙方)範圍的小tkinter窗口使用for循環就像下面的圖像。將值設置爲tkinter條目窗口小部件內for循環時發出

enter image description here

現在我要求是請在左側窗口小部件的一些價值,同時也讓標籤鍵就會自動在右側顯示。我嘗試了使用lambda的綁定方法並獲得了值。但我想知道如何設置每個小部件的值。

我的代碼

import tkinter as tk 
root = tk.Tk() 
num = 5 

def my_funct(var): 
    e.set(var) 

r=0 
for y in range(num): 
    e = tk.StringVar() 

    y = tk.Entry(root) 
    y.bind("<Tab>", lambda event, y=y:my_funct(y.get())) 
    y.grid(row=r, column=1) 

    z = tk.Entry(root, textvariable=e) 
    z.grid(row=r, column=2) 
    r +=1 

root.mainloop() 

我得到的結果是像下面的圖片。有人可以用我的代碼來幫助我實現我期望的目標嗎?

enter image description here

正如你可以找出該值在每一個Tab鍵,最後只控件顯示。有人可以幫我解決這個問題,請解釋我如何實現我所需的輸出。

在此先感謝!

回答

1

您的問題源於事實上您每次都重新指定您的StringVar,因此e始終是最後創建的一個。你需要一個結構來保存這些東西,例如 - dict{entry:variable}對。

這裏有一個片段:

import tkinter as tk 
root = tk.Tk() 
num = 5 

pairs = {} 

def my_funct(entry): 
    var = pairs.get(entry) 
    if var is not None: 
     var.set(entry.get()) 

# r = 0 
for _ in range(num): 
    e = tk.StringVar() 

    y = tk.Entry(root) 
    y.bind("<Tab>", lambda event, y=y:my_funct(y)) 
    y.grid(row=_, column=1) 

    z = tk.Entry(root, textvariable=e) 
    z.grid(row=_, column=2) 
    # r +=1 

    pairs.update({y:e}) 

root.mainloop() 
+0

雅它的工作好,我希望感謝很多答案。我會選擇這一個。順便說一聲,如果你告訴我如何使用'delete(0,END)'方法一次性清除小部件,我將不勝感激。因爲它的for循環讓我感到困惑不已 – Sundararajan

+1

@Sundararajan,[看看](http://effbot.org/tkinterbook/entry.htm#Tkinter.Entry.delete-method)通過effbot.org網站。但在你的情況下,你可以用var.set('')'將'textvariable'設置爲'''',只需創建一個與'my_funct'相同的新函數。它也被描述[在這裏](http://effbot.org/tkinterbook/variable.htm)。無論如何,這並不完全清楚你問什麼 - 如果你卡住了,隨時更新你的問題。 – CommonSense

+0

感謝您的幫助夥計:)將解決。 – Sundararajan

相關問題