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