【问题标题】:Cannot return values from multiple entries in tkinter无法从 tkinter 中的多个条目返回值
【发布时间】:2016-02-22 23:39:34
【问题描述】:

我正在尝试编写一个简单的程序来计算密度(Dens)给定空气中的质量(A)和水中的质量(B)和水的温度(Temp)。我用 tkinter 做了一个 gui。如果我只尝试获取一个值 (ao=float(A.get())),则程序可以工作。但是当我尝试添加第二个值(bo)时,程序不再工作。当我运行 density.py 时,gui 不再出现。这是我的代码:

from tkinter import *
from tkinter import ttk

def calculate(*args):
    try:
        ao = float(A.get())
        #bo = float(B.get())
        #Temp1 = float(Temp.get())
        Dens.set((ao / (ao - 2)))
    except ValueError:
        pass

root = Tk()
root.title("Density Calculation")

mainframe = ttk.Frame(root, padding="5 10")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

A = StringVar()
B = StringVar()
Temp = StringVar()
Dens = StringVar()

A_entry = ttk.Entry(mainframe, width=7, textvariable=A)
A_entry.grid(column=1, row=1, sticky=(W, E))

B_entry = ttk.Entry(mainframe, width=7, textvariable=B)
B_entry.grid(column=1, row=2, sticky=(W, E))

Temp_entry = ttk.Entry(mainframe, width=7, textvariable=Temp)
Temp_entry.grid(column=1, row=3, sticky=(W, E))

ttk.Label(mainframe, textvariable=Dens).grid(column=2, row=4, sticky=(W, E))
ttk.Button(mainframe, text="Calculate", command=calculate).grid(column=3,        row=5, sticky=W)

ttk.Label(mainframe, text="A").grid(column=2, row=1, sticky=W)
ttk.Label(mainframe, text="B").grid(column=2, row=2, sticky=W)
ttk.Label(mainframe, text="temp").grid(column=2, row=3, sticky=W)
ttk.Label(mainframe, text="density is ").grid(column=1, row=4, sticky=E)
ttk.Label(mainframe, text="g/cc").grid(column=3, row=4, sticky=W)

for child in mainframe.winfo_children(): child.grid_configure(padx=5,     pady=5)

A_entry.focus()
root.bind('<Return>', calculate)

root.mainloop()

当我取消注释计算函数中的 bo 和 temp1 行时,程序不再输出 gui。我需要将这些条目称为 Dens 方程的一部分。例如:

Dens.set(ao/(ao-bo))

如何让程序识别多个条目? 谢谢。

【问题讨论】:

    标签: python tkinter get


    【解决方案1】:

    注释掉这两行之后,只要用户在三个文本框中键入三个格式正确的浮点值,您的程序就可以工作。 (我试过了。)calculate 中的except ValueError: pass 代码不是一个好主意。我要么在控制台上打印回溯,要么在Dens 中显示某种错误消息。这将使您能够解决问题并为用户提供一些关于问题所在的线索。

    【讨论】:

    • 我想我的问题是,为什么当我将计算函数定义为时代码不起作用:ao = float(A.get()); bo = float(B.get()); dens.set(ao / (ao - bo))?它甚至没有设置允许我输入值的 gui。
    • 这根本没有意义,因为除非单击 ,否则您注释掉的行不会被执行。除非显示 gui,否则这不会发生。而且程序总是为我运行,无论这些行是否被注释掉。我看不出它不绘制 GUI 的任何原因。当您尝试运行程序时会发生什么?你看到追溯了吗?你能把一些打印语句放在那里看看它在做什么吗?
    • 我不知道为什么它以前不起作用。我删除了这些行,然后以完全相同的方式重新键入它们,现在它可以工作了。去图吧。
    猜你喜欢
    • 2015-03-18
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    相关资源
    最近更新 更多