我目前正在使用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()


我一直遇到的问题是,在我的一个程序中,变量abcfloat,但是在此程序中,要将它们收集为输入,它们必须是字符串。如何使它在程序的一部分中可以是字符串,而在另一部分中可以是浮点数。或我该如何兼顾两者。不要害怕批评其他任何东西,这对我来说是一种学习经验。我得到的确切错误是TypeError: float() argument must be a string or a number, not 'StringVar'

最佳答案

您需要进行两组更改才能使计算器开始工作。

由于abc需要包含float值,因此将它们设置为tkinter.DoubleVar类型会稍微方便一些,因为那样就不需要检索和转换字符串值每个其他地方都需要将其包含在float值中,以使其成为该类型。

请注意,由于您的程序希望它们在数学上是有效的,因此在启动时,它们还需要使用一些值进行初始化,当将它们用于基于以下公式的语句评估语句时,不会导致错误:解决方程:

a = DoubleVar()
a.set(1.0)
b = DoubleVar()
b.set(0.0)
c = DoubleVar()
c.set(0.0)


为了避免同时需要tkinter小部件和GUI和float值来进行计算的问题,最简单的解决方案可能是检索浮点值并将其存储在临时变量中,并根据需要使用它们。在您的代码中,所有操作均在#Answer部分中进行。请注意,这种方法避免了更改变量abc分配给的对象的类型(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/

10-16 22:17