python - 如何根据输入字段的数据自动更新
问题描述
首先让我说我对编码非常陌生。我拼凑起来并编写了一些代码,根据输入到 3 个条目字段中的数据来评估一个方程。我有它,所以当我点击“计算”时,它会评估方程并给我一个答案。有没有办法让它自动计算,这样我就不必在每组条目后点击计算?理想情况下,用户只需按标签,输入数据,标签,输入数据,标签,输入数据,然后使用给出的答案。然后,他们将通过返回初始输入字段来重复该过程。
以下是我的代码的副本:
from tkinter import *
from math import *
def show_entry_fields():
a, b, c = float(e1.get()), float(e2.get()), float(e3.get())
s = (a + b + c) / 2
height = (sqrt (s * (s - a) * (s - b) * (s - c)) * 2) / b
height = float(format(height, '.3f'))
height_label['text'] = str(height)
side =(sqrt ((a ** 2) - (height ** 2)))
side = float(format(side, '.3f'))
side_label['text'] = str(side)
master = Tk()
master.attributes("-topmost", True)
Label(master, text="Measurement from nearest to 0+00").grid(row=5, column=0, sticky=W, pady=4)
e1 = Entry(master)
e1.grid(row=5, column=1, sticky=E)
Label(master, text="Distance between points on Station Line").grid(row=6, column=0, sticky=W, pady=4)
e2 = Entry(master)
e2.grid(row=6, column=1, sticky=E)
Label(master, text="Measurement from farthest from 0+00").grid(row=7, column=0, sticky=W, pady=4)
e3 = Entry(master)
e3.grid(row=7, column=1, sticky=E, pady=4)
Label(master, text="Offset from station line").grid(row=8, column=0, sticky=W, pady=4)
height_label = Label(master, text="")
height_label.grid(row=8, column=1)
Label(master, text="Feet from Measurement nearest to 0+00").grid(row=9, column=0, sticky=W, pady=4)
side_label = Label(master, text="")
side_label.grid(row=9, column=1)
Button(master, text='Calculate', command=show_entry_fields).grid(row=10, column=0, pady=4)
mainloop()
解决方案
有几种方法可以做到这一点,但由于执行的数学很简单,我建议使用它root.after
来计算你的结果。基本上它会尝试每 0.1 秒计算一次,并在没有发现错误时显示结果。
from tkinter import *
from math import *
def show_entry_fields():
try:
a, b, c = float(e1.get()), float(e2.get()), float(e3.get())
s = (a + b + c) / 2
height = (sqrt(s * (s - a) * (s - b) * (s - c)) * 2) / b
height = float(format(height, '.3f'))
height_label['text'] = str(height)
side = (sqrt((a ** 2) - (height ** 2)))
side = float(format(side, '.3f'))
side_label['text'] = str(side)
except ValueError: #catch empty field or invalid input error
pass
master.after(100, show_entry_fields)
...
master.after(100,show_entry_fields) # add this
master.mainloop()
推荐阅读
- c++ - 为什么 getline() 没有读取文本文件中的所有内容?
- linux - 如何让用户在通过 bash 脚本执行一堆任务时更正错误?
- java - 如何在 HttpsURLConnection 上以更安全的方式传递用户和密码?
- xcode - 避免在 XCTest UI 测试中恢复应用程序状态
- oop - 用于 A 类和 C 类的 UML 关系,其中 C 类是 B 类的成员,A 类取决于 B 类
- java - Integer.valueOf 阿拉伯数字工作正常,但 Float.valueOf 相同数字给出 NumberFormatException
- java - Spring Gradle 库中的 Controller / RestController
- python - 如何在 Python 中更改条形图的顺序?
- python - 转换列中的数据类型并替换 NaN 和其他值
- django - Django ListView 为 get_queryset() 方法设置默认查询集