如何列出条目值

时间:2015-12-01 00:58:11

标签: python python-3.x tkinter

我正在尝试使用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)

2 个答案:

答案 0 :(得分:0)

使用列表L1存储Tkinter StringVar()的id。在按钮调用的函数中使用get方法。否则,程序如何知道何时准备好检索数据。 StringVar返回一个必须转换为float的字符串。另外,使用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()

答案 1 :(得分: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())