在我的计算机科学课上,我们被要求制作一个可以解决一些问题的用户界面。所有按钮都有效,数学运算返回正确的答案,但是当我尝试使其在屏幕上弹出时,它不起作用。
这是我的代码(抱歉,有些部分是法语):
from tkinter import *
from math import sqrt
root = Tk()
root.title("CALCULS")
root.geometry("400x300")
vala = "unset"
valb = "unset"
svala = 0
svalb = 0
valtot = "Pas de valeurs"
def updateresult():
printedvaltot.place(x = 60, y = 250, width = 120, height = 20)
def calculer1():
vala = float(entryvala.get())
valb = float(entryvalb.get())
svala = vala**2
svalb = valb**2
valtot = svala - svalb
updateresult()
def calculer2():
vala = float(entryvala.get())
valb = float(entryvalb.get())
valtot = vala + valb
valtot = valtot**2
updateresult()
def calculer3():
vala = float(entryvala.get())
valb = float(entryvalb.get())
valtot = vala - valb
valtot = valtot**2
updateresult()
def calculer4():
vala = float(entryvala.get())
valb = float(entryvalb.get())
valtot = vala*valb
valtot = sqrt(valtot)
updateresult()
#TEXTE
printed1 = Label(root, text = "Choisissez une valeur pour a et b, et une opération", foreground = "#297294")
printed1.place(x = 60, y = 20)
printedvala = Label(root, text = "Valeur de a", background = "#297294")
printedvala.place(x = 60, y = 50, width = 120, height = 20)
printedvalb = Label(root, text = "Valeur de b", background = "#297294")
printedvalb.place(x = 60, y = 80, width = 120, height = 20)
printedvaltot = Label(root, text = str(valtot))
printedvaltot.place(x = 200, y = 250, width = 120, height = 20)
printedresultat = Label(root, text = "RESULTAT", background = "#297294")
printedresultat.place(x = 60, y = 250, width = 120, height = 20)
#INPUT
entryvala = Entry(root)
entryvala.place(x = 200, y = 50, width = 120, height = 20)
entryvalb = Entry(root)
entryvalb.place(x = 200, y = 80, width = 120, height = 20)
#BOUTONS
b1 = Button(root, command = calculer1, text = "a²-b²")
b1.place(x = 60, y = 110, width = 120, height = 20)
b2 = Button(root, command = calculer2, text = "(a+b)²")
b2.place(x = 200, y = 110, width = 120, height = 20)
b3 = Button(root, command = calculer3, text = "(a-b)²")
b3.place(x = 60, y = 140, width = 120, height = 20)
b4 = Button(root, command = calculer4, text = "√(a*b)")
b4.place(x = 200, y = 140, width = 120, height = 20)
除了更新标签部分之外,所有这些都有效。救命!!
我尝试从头开始重新制作它,但没有成功。我尝试使用 strvar 方法,但没有成功。我尝试对这个特定标签使用 textvariable,但仍然不起作用。
请注意,那些
valtot
中的 calculateX()
是局部变量,而不是全局变量。 所以更新它并不会更新全局的。
您可以将这些计算的结果传递给
updateresult()
并使用该结果更新所需的标签。
以下是所需的更改:
def updateresult(result): # added argument
printedvaltot.config(text=result) # update label with passed value
def calculer1():
...
updateresult(valtot) # pass result to update function
def calculer2():
...
updateresult(valtot)
def calculer3():
...
updateresult(valtot)
def calculer4():
...
updateresult(valtot)