我目前正在制作一个带有 GUI 的二次计算器。我有两个部分独立启动和运行,但现在在尝试将它们结合起来时遇到了一个问题。这是我的代码。
from tkinter import *
from tkinter import ttk
import math
def click():
entered_text=textentry.get()
def search():
print(a.get())
print(b.get())
print(c.get())
return ''
#Window and Title
root = Tk()
root.title("Quadratic Calculator")
root.configure(background="black")
Label (root, text="Quadratic Calculator", bg="black", fg="grey", font="none 18 bold") .grid(row=1, column=0, sticky=N)
a=StringVar()
b=StringVar()
c=StringVar()
#inputs
Label (root, text="Enter your A value!", bg="black", fg="grey", font="none 12 bold") .grid(row=2, column=0, sticky=N)
textentry = Entry(root, width=20, bg="white", textvariable=a)
textentry.grid(row=3, column=0, sticky=N)
Label (root, text="Enter your B value!", bg="black", fg="grey", font="none 12 bold") .grid(row=4, column=0, sticky=N)
textentry = Entry(root, width=20, bg="white", textvariable=b)
textentry.grid(row=5, column=0, sticky=N)
Label (root, text="Enter your c value!", bg="black", fg="grey", font="none 12 bold") .grid(row=6, column=0, sticky=N)
textentry = Entry(root, width=20, bg="white", textvariable=c)
textentry.grid(row=7, column=0, sticky=N)
#Answer
Label (root, text="Answer!", bg="black", fg="grey", font="none 12 bold").grid(row=8, column=0, sticky=N)
output = Text(root, width=75, height=6, wrap=WORD, bg="white")
output.grid(row=9, column=0, columnspan=2, sticky=N)
a = float(a)
b = float(b)
c = float(c)
d = (math.pow(b,2)-4*a*c)
if d < 0:
print("There is no answer")
elif d == 0:
x =(-b + (d))/ (2*a)
print("There is one answer:",x)
else:
x1 = ( -b + (math.sqrt(d)))/ (2*a)
x2 = ( -b - (math.sqrt(d)))/ (2*a)
print("There are two answers:", x1,"and" ,x2)
#Solve Button
Button(root, text="Solve", width=6, command=search) .grid(row=10, column=0,
sticky=N)
root.mainloop()
我遇到的问题是变量a
、b
和c
是float
在我的一个程序中,但在这个程序中,为了将它们收集为输入,它们必须是字符串。我该如何做到这一点,以便在我的程序的一部分中它们可以是字符串,而在另一部分中它们可以是 float 。或者我怎样才能使两者都适合。不要害怕对其他任何事情提出批评,这对我来说是一次学习经历。我得到的确切错误是 TypeError: float() argument must be a string or a number, not 'StringVar'
.
最佳答案
您需要进行两组更改才能让计算器开始工作。
由于a
、b
和c
需要包含float
值,所以会稍微方便一些使它们成为 tkinter.DoubleVar
类型,因为这样您就不需要在其他需要它们的地方检索每个包含的字符串值并将其转换为 float
值类型。
请注意,因为您的程序期望它们在数学上是有效的,所以当它启动时,它们还需要使用一些值进行初始化,当它们用于评估基于以下内容的语句时,不会导致错误求解方程的公式:
a = DoubleVar()
a.set(1.0)
b = DoubleVar()
b.set(0.0)
c = DoubleVar()
c.set(0.0)
为了避免 GUI 需要 tkinter 小部件和计算需要 float
值的问题,最简单的解决方案可能只是检索浮点值并将其存储在临时变量中,并根据需要使用它们。在您的代码中,这一切都发生在 #Answer
部分。请注意,此方法避免更改变量 a
、b
和 c
分配给的对象(tkinter 小部件)的类型(与您问题中的代码)。
# Get current values of DoubleVars.
a_val = a.get()
b_val = b.get()
c_val = c.get()
d = math.pow(b_val, 2) - 4*a_val*c_val
if d < 0:
print("There is no answer")
elif d == 0:
x = (-b_val + d) / (2*a_val)
print("There is one answer:", x)
else:
x1 = (-b_val + math.sqrt(d)) / (2*a_val)
x2 = (-b_val - math.sqrt(d)) / (2*a_val)
print("There are two answers:", x1, "and", x2)
关于python - 使用 Tkinter 的二次方程计算器。定义变量时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52680358/