Skip to main content
 首页 » 编程设计

python之Python 中的计算器不会更新为 "Entry"。这是一个 GUI 计算器

2024年10月01日31落叶无声

我想制作一个 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() 

请您参考如下方法:

您的计算结果绑定(bind)到名称 resultado,但您调用 self.total.set 时使用了不存在的名称 result > 而不是 resultado。但是您的代码不会报告此错误,因为您使用“裸” except: 子句禁用了错误消息。捕获异常时,最好使用命名异常,这样您就可以只捕获想要捕获的内容,并且 except block 应该使用 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 * 通配符导入语句。而且我摆脱了对名称的分配,例如 l_uno。 .grid 方法返回 None,因此这些赋值只是将 None 保存到这些名称,而不是保存小部件。但由于您不需要保留对这些小部件的引用,因此无需执行任何分配。当您确实需要保留一个引用时,您需要在一行上定义小部件并在另一行调用.grid,就像您对self 所做的那样.uno 和 self.dos。