<p>您的代码有很多问题,但是<code>TypeError</code>是由这组语句引起的:</p>
<pre><code>Cscore=c.get()
Bscore=b.get()
Ascore=a.get()
</code></pre>
<p>因为<code>Entry</code>小部件的内容是<em>字符串</em>,而不是执行计算所需的浮点值。您还在错误的时间执行<code>get()</code>方法-在单击<kbd>solve</kbd>按钮之前不应该执行,因此我已经有效地将它们移动到了<code>myClick()</code>回调函数中</p>
<p>为了帮助纠正这个问题,我添加了一个名为<code>get_numeric_value()</code>的助手函数,对作为参数传递给它的<code>Entry</code>进行转换</p>
<p>除此之外,我还修复了其他几个问题,使其能够运行<em>注意:</em>如果你打算使用这种语言,我强烈建议你阅读并开始跟随<a href="https://www.python.org/dev/peps/pep-0008/" rel="nofollow noreferrer">PEP 8 - Style Guide for Python Code</a></p>
<pre><code>import math
from tkinter import *
root = Tk()
a = Entry(root, width=50, bg="white",
fg="black",
borderwidth=3.5,)
a.pack()
b = Entry(root, width=50, bg="white",
fg="black",
borderwidth=3.5,)
b.pack()
c = Entry(root, width=50, bg="white",
fg="black",
borderwidth=3.5,)
c.pack()
def solve(Ascore, Bscore, Cscore):
""" Solve quadratic equation: ax^2 + bx + c = 0
and return solution values.
"""
try:
d = math.sqrt((Bscore**2)- 4*Ascore*Cscore)
x1 = (-Bscore - d) / (2 * Ascore)
x2 = (-Bscore + d) / (2 * Ascore)
return x1, x2
except ValueError:
return math.nan, math.nan
def get_numeric_value(entry):
""" Retrieve Entry's string contents and convert it to a float. """
v = entry.get()
return float(v) if v else 0.0
# Alternative using "walrus" operator added in Python 3.8.
#def get_numeric_value(entry):
# """ Retrieve Entry's string contents and convert it to a float. """
# return float(v) if (v := entry.get()) else 0.0
def myClick():
# Ascore = get_numeric_value(a)
# Bscore = get_numeric_value(b)
# Cscore = get_numeric_value(c)
Ascore, Bscore, Cscore = map(get_numeric_value, (a, b, c))
x1, x2 = solve(Ascore, Bscore, Cscore)
myLabel3 = Label(root, borderwidth=15,
text=f"Megoldás {x1:.6f}, {x2:.6f}")
myLabel3.pack()
myButton = Button(root, text="solve",
padx=10, pady=5, command=myClick,
fg= "black", bg="white")
myButton.pack()
root.mainloop()
</code></pre>