python - 如何根据您在另一个条目小部件中键入的内容填充一个条目小部件
问题描述
所以我有两个输入字段,一个用于用户输入数字,第二个用于显示输入数字的平方。我想要的方法是,当用户开始在第一个小部件中输入数字时,第二个小部件应该更新为在第一个小部件中输入的数字的相应平方。
这是我的图形用户界面
现在这是我的代码,但它没有按我的预期工作。请帮助我了解如何在不涉及按钮用户的情况下解决此问题。
import tkinter as tk
from tkinter import *
def keyPressed(event):
#key = entry.get(event.char)
key=entry.get()
if key.isdigit():
ans_txt.delete(0, END)
ans_txt.insert(0,key)
print(key, " success")
else:
print("fail")
app=Tk()
app.geometry("400x350")
ent_lbl=Label(app, text="NUMBER: ", padx=3, pady=3)
ent_lbl.grid(column=0, row=0)
entry = tk.Entry(width=15)
entry.bind("<Key>", keyPressed)
entry.grid(column=1, row=0, padx=20, pady=20)
ans_lbl=Label(app, text="SQUARE: ", padx=3, pady=3)
ans_lbl.grid(column=0, row=20)
ans_txt=tk.Entry(app, width=15)
ans_txt.grid(column=1, row=20)
app.mainloop()
解决方案
您应该使用小部件的.trace
方法Entry
。您可以使用该方法捕获“写入”事件,trace
并且可以使用该方法调用回调函数。文档trace
: http: //mgltools.scripps.edu/api/DejaVu/Tkinter.Variable-class.html
此外,您必须使用IntVar()
来显示(和计算)resulEntry
小部件中的数字。文档IntVar
:http ://epydoc.sourceforge.net/stdlib/Tkinter.IntVar-class.html
完整代码:
import tkinter as tk
from tkinter import *
app = Tk()
app.geometry("400x350")
input_var = tk.IntVar()
Label(app, text="NUMBER: ", padx=3, pady=3).grid(column=0, row=0)
input_entry = tk.Entry(width=15, textvariable=input_var)
input_entry.grid(column=1, row=0, padx=20, pady=20)
result_var = tk.IntVar()
Label(app, text="SQUARE: ", padx=3, pady=3).grid(column=0, row=20)
output_entry = tk.Entry(app, width=15, textvariable=result_var)
output_entry.grid(column=1, row=20)
def key_pressed(name, index, mode):
output_entry.delete(0, END)
try:
output_entry.insert(0, int(input_entry.get()) ** 2)
except Exception:
output_entry.insert(0, "Wrong Input")
output_entry.delete(0, END) # Shouldn't show trailing zero when starting the GUI
input_entry.delete(0, END) # Shouldn't show trailing zero when starting the GUI
input_var.trace("w", key_pressed)
result_var.trace("w", key_pressed)
app.mainloop()
输出:
错误处理:
推荐阅读
- sql - ORA-00920: 在子查询中使用聚合时无效的关系运算符
- html - Flex,使用 wrap 属性来阻塞
- android - Android Studio 构建超时
- c# - 表达式树 C# - 空条件操作符 (?.)
- java - 打印数字的同心正方形
- node.js - ZeroMQ PUSH/PULL 通信不能通过 IPC 工作,但它可以通过 TCP 工作
- angularjs - 如何在 Angular 控制器中使用 eventListener 为 body 创建正确的切换?
- angular - ngClass 不评估
- xml - MarkLogic:如何在 cts:uris 中使用和查询?
- java - 我试图单击列表中的第一个元素,但编译器每次都会抛出异常