我试图用一个按钮计算两个 tkinter 条目

Im trying to get calculate two tkinter entries with a button

我试过StringVar,我试过set()。 注意:该程序在单独的弹出窗口中成功计算了值和 returns 答案,但我希望它也能在只读“码”输入字段中显示答案。

import tkinter as tk
import tkinter.ttk as ttk

#Formats all of the visible elements of the tkninter GUI.Connects the buttons to their functions.
class MetersToYardsApp:
    def __init__(self, parent):



        topLevel = ttk.Frame(parent, padding=10)
        topLevel.grid(column=0, row=0)

        headerLabel = ttk.Label(topLevel, text="Meters to Yards Calculator", font="{Arial} 16 {bold}")
        headerLabel.grid(column=0, row=0, sticky="nsew")

        inputFrame = ttk.Frame(topLevel, padding=10)
        inputFrame.grid(column=0, row=1, sticky="nsew")

        metersLabel = ttk.Label(inputFrame, text="Meters:")
        yardsLabel = ttk.Label(inputFrame, text="Yards:")

        metersEntry = ttk.Entry(inputFrame)
        yardsEntry = ttk.Entry(inputFrame, state="readonly")

        metersLabel.grid(column=0, row=0, sticky="e")
        yardsLabel.grid(column=0, row=1, sticky="e")

        metersEntry.grid(column=1, row=0, pady=3)
        yardsEntry.grid(column=1, row=1, pady=3)

        buttonFrame = ttk.Frame(topLevel)
        buttonFrame.grid(column=0, row=2, sticky='nsew')

        clearButton = ttk.Button(buttonFrame, text="Clear", command=self.clear)
        okayButton = ttk.Button(buttonFrame, text="Calculate", command=self.calculate)
        clearButton.grid(column=0, row=0, padx=3)

        okayButton.grid(column=1, row=0)



        self.mainWindow = topLevel

        self.metersEntry = metersEntry
        self.yardsEntry = yardsEntry


    #Clear Button
    def clear(self):
        # print("Clear")
        self.metersEntry.delete(0, tk.END)
    #Formats the Pop-up that displays the answer
    def showAnswer(self, parent, text):



        rootFrame = ttk.Frame(parent, padding=10)
        rootFrame.grid(column=0, row=0)

        headerLabel = ttk.Label(rootFrame, text="The Answer", font="{Arial} 14 {bold}")
        headerLabel.grid(column=0, row=0)

        answerLabel = ttk.Label(rootFrame, text=text, justify=tk.CENTER)
        answerLabel.grid(column=0, row=1)


    #Performs Calculations if input is valid.
    def calculate(self):
        # print("Calculate Meters: ", self.metersEntry.get())
        try:
            meters = float(self.metersEntry.get())
            yards = meters * 1.094


        except:
            top2 = tk.Toplevel(self.mainWindow)
            self.showAnswer(top2, "There was an Error.\n" + "Please Enter a Valid Number for Meters")
            # print("Please Enter a Valid Number for Meters.")
            return

        

        print(meters, "Meters is ", yards, "Yards. ")
        top2 = tk.Toplevel(self.mainWindow)





        self.showAnswer(top2, str(meters) + " Meters is equivalent to " + "{:.2f} Yards.".format(yards))

        return float(yards)

您必须使用 DoubleVar 来更新 Entry 元素:

yards_entry_var = tk.DoubleVar(inputFrame, 0)

那么你应该把它放在 Entry 元素里面 'textvariable':

yardsEntry = ttk.Entry(inputFrame, textvariable=yards_entry_var, state="readonly")

在初始化函数之外使用它:

self.yards_entry_var = yards_entry_var

在计算函数中,计算码数后:

self.yards_entry_var.set(yards)

最后,当您想在清除函数中清除值时:

self.yards_entry_var.set(0)