Python中的计算器不会使用" Entry"进行更新。它是一个GUI计算器

时间:2017-11-02 17:03:10

标签: python tkinter

我想制作一个GUI计算器。我使用过模块tkinter。我这样做是为了在终端上打印,但是当我尝试在Entry中更新它时它不会更新。我该怎么办?

from tkinter import *
from tkinter import ttk
import tkinter as tk

class App:
    def __init__(self, master):

        self.total = DoubleVar(value=0.0)

        l_uno = ttk.Label(master, text="Nº 1 = ").grid(row=1, column=1)
        l_dos = ttk.Label(master, text="Nº 2 = ").grid(row=1, column=3)

        self.uno = ttk.Entry(master)
        self.uno.grid(row=1, column=2)

        self.dos = ttk.Entry(master)
        self.dos.grid(row=1, column=4)

        self.bsuma = ttk.Button(master, text="+", command=self.suma).grid(row=3, column=1)
        e_resultado = ttk.Entry(master, textvariable=self.total).grid(row=1, column=5)

   def suma(self):
       data_error = False
       try:
           resultado = float(self.uno.get()) + float(self.dos.get())
           print (resultado)
           self.total.set(result)
       except:
           data_error = True
root = Tk()
alfa = App(root)
root.mainloop()

1 个答案:

答案 0 :(得分:2)

您的计算结果已绑定到名称resultado,但您使用不存在的名称self.total.set而不是result来调用resultado。但是您的代码没有报告此错误,因为您使用" naked"来禁用了错误消息。 except:条款。在捕获异常时,使用命名异常是一个好主意,这样您只能捕获要捕获的内容,except块应该使用Exception对象提供的信息。

这是修复后的代码版本。

from tkinter import ttk
import tkinter as tk

class App:
    def __init__(self, master):
        self.total = tk.DoubleVar(value=0.0)

        ttk.Label(master, text="Nº 1 = ").grid(row=1, column=1)
        ttk.Label(master, text="Nº 2 = ").grid(row=1, column=3)

        self.uno = ttk.Entry(master)
        self.uno.grid(row=1, column=2)

        self.dos = ttk.Entry(master)
        self.dos.grid(row=1, column=4)

        ttk.Button(master, text="+", command=self.suma).grid(row=3, column=1)
        ttk.Entry(master, textvariable=self.total).grid(row=1, column=5)

    def suma(self):
       data_error = False
       try:
           resultado = float(self.uno.get()) + float(self.dos.get())
           print (resultado)
           self.total.set(resultado)
       except ValueError as e:
           print(e)
           data_error = True

root = tk.Tk()
alfa = App(root)
root.mainloop()

我还对您的代码进行了一些其他细微更改。我摆脱了from tkinter import *通配符import语句。我摆脱了像l_uno这样的名字的分配。 .grid方法返回None,因此这些分配只是将None保存到这些名称,他们不会保存小部件。但由于您不需要保留对这些小部件的引用,因此无需执行任何分配。当需要保留引用时,您需要在一行上定义窗口小部件并在另一行上进行.grid调用,就像使用self.uno和{{self.dos一样1}}。