【问题标题】:Update Variable After Calculation in Function - Python在函数中计算后更新变量 - Python
【发布时间】:2021-11-11 11:34:08
【问题描述】:

我正在用 tkinter 做一个简单的计算器,计算部分很好。问题是计算后变量(答案)没有得到更新。

您可以在窗口中看到,结果标签是空的,因为它是初始值。 tkinter window

这是我使用的代码:

from tkinter import *
import tkinter.messagebox as messagebox

answer=""
root = Tk()
root.geometry("600x300")
root.title("Simple Calculator")


def calculate():
    value_1 = value_1_entry.get()
    operator = operator_entry.get()
    value_2 = value_2_entry.get()
    
    if operator=='+':
        answer = float(value_1_entry.get()) + float(value_2_entry.get())
        print(answer)

    
    elif operator=='-':
        answer = float(value_1_entry.get()) - float(value_2_entry.get())
        print(answer)
        
    return answer
    

##################Labels###############
value_1 = Label(root, text='Enter first value', font=('bold', 10))
value_1.place(x=20, y=30)
value_1_entry = Entry()
value_1_entry.place(x=150, y=30)

operator = Label(root, text='Enter the operator', font=('bold', 10))
operator.place(x=20, y=60)
operator_entry = Entry()
operator_entry.place(x=150, y=60)

value_2 = Label(root, text='Enter second value', font=('bold', 10))
value_2.place(x=20, y=90)
value_2_entry = Entry()
value_2_entry.place(x=150, y=90)

#################Results####################
result = Label(root, text='Result:', font=('bold', 10))
result.place(x=20, y=120)
result_ = Label(root, text=answer, font=('bold', 10))
result_.place(x=150, y=120)

##################Buttons###############
calculate = Button(root, text="calculate", font=("bold",10), bg="white", command=calculate)
calculate.place(x=70, y=140)

# Run
root.mainloop()

我不知道如何让 answer="" 在 tkinter 窗口、结果标签中更新为新答案。

【问题讨论】:

  • answer 是一个全局变量,但是当您在 calculate 函数中执行 answer = <something> 时,您正在修改局部变量。请改用global answer 来更新全局引用。

标签: python tkinter


【解决方案1】:

您可以使用Label.config() method 更新标签文本。

语法:Label.config(text = your_text)

result_.config(text=answer)

以你的情况为例:

if operator == '+':
    answer = float(value_1_entry.get()) + float(value_2_entry.get())

elif operator == '-':
    answer = float(value_1_entry.get()) - float(value_2_entry.get())

result_.config(text=answer)

【讨论】:

    【解决方案2】:

    只需更新calculate()内的标签:

    def calculate():
        value_1 = value_1_entry.get()
        operator = operator_entry.get()
        value_2 = value_2_entry.get()
    
        answer = None
        if operator=='+':
            answer = float(value_1_entry.get()) + float(value_2_entry.get())
    
        elif operator=='-':
            answer = float(value_1_entry.get()) - float(value_2_entry.get())
    
        if answer:
            print(answer)
            result_['text'] = answer  # update result_ label
    
        return answer
    

    【讨论】:

      猜你喜欢
      • 2016-03-12
      • 2023-03-27
      • 2020-02-24
      • 2023-02-09
      • 2015-09-27
      • 2020-09-02
      • 2020-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多