2015-12-01 78 views
1

我試圖用for循環創建多個條目框,因此如果我想增加條目數量,則不必手動創建所有不同的框,但是這樣我就無法通過.get()獲取我的輸入值。如果我打印L1,輸出是一個三個空字符串的列表,所以在我將它們輸入到輸入框後沒有添加任何值。我如何製作一個包含所有條目值的列表作爲浮點數?如何創建條目值列表

from tkinter import * 
window = Tk() 
window.geometry("450x450+200+200") 

def do(): 
    print(L1) 

L1 = [] 
for i in range(3): 
    labelx = Label(window, text = str(i)).grid(row = i, column = 0) 
    v = StringVar() 
    num = Entry(window, textvariable = v).grid(row = i, column = 1) 
    num1 = v.get() 
    L1.append(num1) 

button1 = Button(window, text = 'OK', command = do).grid(column = 1) 

回答

0

使用列表L1存儲Tkinter StringVar()的id。在按鈕調用的函數中使用get方法。否則,程序如何知道數據何時可以被檢索。一個StringVar返回一個字符串,它必須被轉換爲一個浮點數。此外,使用i,l或o作爲單個數字變量名稱是個不好的習慣,因爲它們看起來像數字。

window = Tk() 
window.geometry("450x450+200+200") 

def do(): 
    for var_id in L1: 
     print(var_id.get()) 
     var_id.set("") 

L1 = [] 
for ctr in range(3): 
    ## grid() returns None 
    Label(window, text = str(ctr)).grid(row = ctr, column = 0) 
    var_id = StringVar() 
    ent=Entry(window, textvariable = var_id) 
    ent.grid(row = ctr, column = 1) 
    ##num1 = v.get()-->nothing entered when program starts 
    if 0==ctr: 
     ent.focus_set() 
    L1.append(var_id) 

button1 = Button(window, text = 'OK', command = do).grid(column = 1) 

window.mainloop() 
+0

謝謝!這真的有很大的幫助!我還有一個問題...一旦按下按鈕,輸入框中輸入的所有值都將被清除。我怎樣才能保持輸入框中的值,所以一旦我按下了按鈕,我就不必再把它們全部輸入了。由於沒有ent.delete(0,END)的評論,我沒有想到會出現這種情況。 – LdK

0

您的原始代碼將值存儲在列表中。而是存儲對小部件的引用。有了這個,沒有理由創建StringVar對象。

請注意,要做到這一點,您必須創建該小部件並將其作爲兩個單獨的語句調用grid。它不僅允許這種技術發揮作用,它通常被認爲是將窗口小部件創建與窗口小部件佈局分開的最​​佳實踐。

L1 = [] 
for i in range(3): 
    labelx = Label(window, text = str(i)) 
    num = Entry(window, textvariable = v) 

    labelx.grid(row = i, column = 0) 
    num.grid(row = i, column = 1) 

    L1.append(num) 
... 
for widget in L1: 
    print("the value is", widget.get())