首页 > 解决方案 > tkinter,将输入保存为变量

问题描述

我想使用输入值作为变量,这是我的代码。

from tkinter import *
from tkinter import messagebox

window = Tk()
Label(window, text='Cavity number').grid(row=0)

CavNum = StringVar()

for i in range(1,8) :
   globals()['L{}_CavNum'.format(i)] = StringVar()
   globals()['L{}_CavNum'.format(i)] = Entry(window, textvariable=globals()['L{}_CavNum'.format(i)])
   globals()['L{}_CavNum'.format(i)].grid(row=0, column=i)

window.geometry("1200x150")

window.mainloop()

每次我打印(L1_CavNum)时,它都会显示“<tkinter.Entry object .!entry>”。请告诉我有什么问题

标签: pythontkinter

解决方案


您正在为条目小部件重新使用与 StringVar 相同的名称。您可以简单地更改globals()['L{}_CavNum'.format(i)] = StringVar()globals()['L{}_CavNumSV'.format(i)] = StringVar()和。但是 .get() 函数将在您的代码运行时执行,因此您必须有一个按钮或另一个事件来回调该函数。print(L1_CavNum)print(L1_CavNumSV.get())

我会这样做。

from tkinter import *


def print_vars():
    for x in range(len(cavity_string_vars)):
        print(cavity_string_vars[x].get())


window = Tk()
Label(window, text='Cavity number').grid(row=0)

cavity_string_vars = []
cavity_entries = []

for i in range(7):
    cavity_string_vars.append(StringVar())
    cavity_entries.append(Entry(window, textvariable=cavity_string_vars[i]))
    cavity_entries[i].grid(row=0, column=i)

print_button = Button(window, text="Print", command=print_vars)
print_button.grid(row=1, column=0)

window.geometry("1200x150")

window.mainloop()

对我来说,关联数组比命名每个变量要容易得多,即使您按照自己的方式对其进行编程也是如此。也许您的情况需要这样做。


推荐阅读