首页 > 解决方案 > 如何根据您在另一个条目小部件中键入的内容填充一个条目小部件

问题描述

所以我有两个输入字段,一个用于用户输入数字,第二个用于显示输入数字的平方。我想要的方法是,当用户开始在第一个小部件中输入数字时,第二个小部件应该更新为在第一个小部件中输入的数字的相应平方。

这是我的图形用户界面

这是我的图形用户界面

现在这是我的代码,但它没有按我的预期工作。请帮助我了解如何在不涉及按钮用户的情况下解决此问题。

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()

标签: pythontkinter

解决方案


您应该使用小部件的.trace方法Entry。您可以使用该方法捕获“写入”事件,trace并且可以使用该方法调用回调函数。文档trace: http: //mgltools.scripps.edu/api/DejaVu/Tkinter.Variable-class.html

此外,您必须使用IntVar()来显示(和计算)resulEntry小部件中的数字。文档IntVarhttp ://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()

输出:

正确的输出

错误处理:

错误处理


推荐阅读