我的 Python Tkinter 标签在我想要的时候没有更新

问题描述 投票:0回答:1

在我的计算机科学课上,我们被要求制作一个可以解决一些问题的用户界面。所有按钮都有效,数学运算返回正确的答案,但是当我尝试使其在屏幕上弹出时,它不起作用。

这是我的代码(抱歉,有些部分是法语):

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,但仍然不起作用。

python tkinter tkinter-entry tkinter-button tkinter-label
1个回答
0
投票

请注意,那些

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)
© www.soinside.com 2019 - 2024. All rights reserved.