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