tkinter中的Python IntVar/entry将只返回0

2024-06-25 06:20:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用tkinter制作的图形用户界面编写一个程序来进行计算和求解方程,并且已经达到了输入已知值的程度。这些值是在tkinter的entry小部件中输入的(我使用的是IntVar(),而不是StringVar(),因此这不是问题所在),但是出于某种原因,无论我输入什么值,它都只返回为0。代码如下:

def getvalues_1dk():
    getvalues2frame = ttk.Frame(calculations_root, width=100, height=100, padding="5")
    getvalues2frame['borderwidth'] = 3
    getvalues2frame['relief'] = 'raised'
    getvalues2label = ttk.Label(getvalues2frame, text="Step 5: Enter a value for each of the variables you\n"
                                                      " selected in step 4.")
    getvalues2label.grid(row=1, column=1, sticky=(N, W))
    getvalues2frame.grid(row=0, column=0, sticky=E)
    getvalue1(getvalues2frame)
    return getvalues2frame

def getvalue1(getvalues2frame):
    if known1d1.get() and known1d2.get() and known1d3.get():
        known1d1entryvar = IntVar()
        known1d1entry = ttk.Entry(getvalues2frame, textvariable=known1d1entryvar)
        ttk.Label(getvalues2frame, text=known1d1.get()).grid(row=2, column=1, sticky=W)
        known1d1entry.grid(row=2, column=1, sticky=E)
        ttk.Button(getvalues2frame, text="Confirm",
                   command=(getvalue2(getvalues2frame, known1d1entryvar))).grid(row=3, column=1,
                                                                                sticky=E)
        return known1d1entryvar

def getvalue2(getvalues2frame, known1d1entryvar):
    if known1d1entryvar.get():
        known1d2entryvar = IntVar()
        known1d2entry = ttk.Entry(getvalues2frame, textvariable=known1d2entryvar)
        ttk.Label(getvalues2frame, text=known1d2.get()).grid(row=4, column=1, sticky=W)
        known1d2entry.grid(row=4, column=1, sticky=E)
        ttk.Button(getvalues2frame, text="Confirm",
                   command=(getvalue3(getvalues2frame, known1d1entryvar, known1d2entryvar))).grid(row=5, column=1,
                                                                                                  sticky=E)
        return known1d2entryvar

def getvalue3(getvalues2frame, known1d1entryvar, known1d2entryvar):
    if known1d2entryvar.get():
        known1d3entryvar = IntVar()
        known1d3entry = ttk.Entry(getvalues2frame, textvariable=known1d3entryvar)
        ttk.Label(getvalues2frame, text=known1d3.get()).grid(row=6, column=1, sticky=W)
        known1d3entry.grid(row=6, column=1, sticky=E)
        calculatebutton = ttk.Button(getvalues2frame, text="Show formula and calculate",
                                     command=(
                                         calculate1d(known1d1entryvar, known1d2entryvar, known1d3entryvar,
                                                     solveforvar1d, unusedvar1d)))
        calculatebutton.grid(row=7, column=1, sticky=E)

def calculate1d(known1d1entryvar, known1d2entryvar, known1d3entryvar, solveforvar1d, unusedvar1d):
    if known1d1entryvar.get() and known1d2entryvar.get() and known1d3entryvar.get():
        knownvar1 = known1d1entryvar.get()
        knownvar2 = known1d2entryvar.get()
        knownvar3 = known1d3entryvar.get()
        print(knownvar1, knownvar2, knownvar3)
        solveforvar1d = Symbol(solveforvar1d)
        print(solveforvar1d)
        print(unusedvar1d)

这段代码应该是:1)创建一个标签框,在这里输入值;2)为第一个已知变量的整数值创建一个输入框,以及一个确认值并创建下一个输入框的按钮;3)按下按钮时创建下一个输入框,4) 创建另一个按钮以确认第二个值并创建下一个输入框,5)按下按钮时创建第三个输入框,并创建另一个按钮以运行函数calculate1d(),该函数当前是一个占位符,用于查看程序是否返回正确的值。在

但是,它不起作用。在为第一个值创建输入框并创建按钮以确认并创建第二个输入框和按钮之后,代码将停止。有了这段代码,我根本看不到为输入框返回了什么值。不过,我尝试将puting print(known1d1entryvar.get())放在getvalue2()的开头,以查看它返回的值,不管我输入了什么值,它都返回0。此外,当我按下调用getvalues_1dk()函数的按钮(未显示)时,它会打印值0,而不是在我希望的时候,在第一个输入框中输入一个数字并按下第一个按钮之后。在

请帮帮我。我已经坚持了两天了,我已经想尽一切办法了。在

编辑:如果有必要,我可以把我的全部源代码发布在一个粘贴网站上。有必要就问。在


Tags: andtextgetdefcolumn按钮gridrow
1条回答
网友
1楼 · 发布于 2024-06-25 06:20:55

与tk条目widget相比,ttk条目小部件更容易受到垃圾收集的影响。您正在为您的IntVars使用局部变量。您需要确保这些变量不会被垃圾回收。更好的是,根本不用。在

大多数情况下,StringVar和/或{}在Entry小部件中是完全没有必要的。您可以在没有小部件的情况下将值放入或取出。它们只是添加了一个必须维护的额外对象,而不会带来任何实际的好处。它们唯一有用的时候是如果您对多个小部件使用同一个变量,或者对这些变量进行跟踪。在

相关问题 更多 >