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