如何将Tkinter计算器Entry框中的运算内容传入Text文本框?
解决Tkinter计算器运算式传递到Text框的问题
你的代码核心问题是没有在计算完成后将输入的运算式写入Text组件。只需修改equal()函数,同时获取运算式和计算结果,再将其插入到Text框中即可。
修改后的完整代码
import tkinter as tk import tkinter.messagebox from tkinter.constants import SUNKEN window=tk.Tk() window.title('Calculator') frame=tk.Frame(master=window,bg="PaleGreen",padx=10) frame.pack() frame2 = tk.Frame(master = window,padx = 10) frame2.pack() entry=tk.Entry(master=frame,relief=SUNKEN,borderwidth=3,width=30) entry.grid(row=0,column=0,columnspan=3,ipady=2,pady=2) def click(number): entry.insert(tk.END,number) def equal(): try: expr = entry.get() # 获取输入的运算式 y = str(eval(expr)) # 将运算式和结果格式化后插入Text框,每行一条记录 TextB.insert(tk.END, f"{expr} = {y}\n") entry.delete(0,tk.END) entry.insert(0,y) except: tkinter.messagebox.showinfo("Warning!","Syntax Error") def clear(): entry.delete(0,tk.END) # 可选:清空Text框的内容 # TextB.delete(1.0, tk.END) result_label = tk.Label(text="Eredmény:",fg="green",bg="yellow") result_label.pack() # 给Text框设置合适的高度和宽度,优化显示 TextB = tk.Text(master=frame2, height=6, width=30) TextB.pack() # 以下按钮代码保持不变 button_1=tk.Button(master=frame,text='1',padx=15,pady=5,width=3,command=lambda:click(1)) button_1.grid(row=3,column=0,pady=2) button_2=tk.Button(master=frame,text='2',padx=15,pady=5,width=3,command=lambda:click(2)) button_2.grid(row=3,column=1,pady=2) button_3=tk.Button(master=frame,text='3',padx=15,pady=5,width=3,command=lambda:click(3)) button_3.grid(row=3,column=2,pady=2) button_4=tk.Button(master=frame,text='4',padx=15,pady=5,width=3,command=lambda:click(4)) button_4.grid(row=4,column=0,pady=2) button_5=tk.Button(master=frame,text='5',padx=15,pady=5,width=3,command=lambda:click(5)) button_5.grid(row=4,column=1,pady=2) button_6=tk.Button(master=frame,text='6',padx=15,pady=5,width=3,command=lambda:click(6)) button_6.grid(row=4,column=2,pady=2) button_7=tk.Button(master=frame,text='7',padx=15,pady=5,width=3,command=lambda:click(7)) button_7.grid(row=5,column=0,pady=2) button_8=tk.Button(master=frame,text='8',padx=15,pady=5,width=3,command=lambda:click(8)) button_8.grid(row=5,column=1,pady=2) button_9=tk.Button(master=frame,text='9',padx=15,pady=5,width=3,command=lambda:click(9)) button_9.grid(row=5,column=2,pady=2) button_0=tk.Button(master=frame,text='0',padx=15,pady=5,width=3,command=lambda:click(0)) button_0.grid(row=6,column=0,pady=2) button_add=tk.Button(master=frame,text="+",padx=15,pady=5,width=3,command=lambda:click('+')) button_add.grid(row=1,column=0,pady=2) button_subtract=tk.Button(master=frame,text="-",padx=15,pady=5,width=3,command=lambda:click('-')) button_subtract.grid(row=1,column=1,pady=2) button_multiply=tk.Button(master=frame,text="*",padx=15,pady=5,width=3,command=lambda:click('*')) button_multiply.grid(row=1,column=2,pady=2) button_div=tk.Button(master=frame,text="/",padx=15,pady=5,width=3,command=lambda:click('/')) button_div.grid(row=2,column=0,pady=2) btnC=tk.Button(master=frame,text="clear",padx=15,pady=5,width=12,command=clear) btnC.grid(row=2,column=1,columnspan=2,pady=2) button_equal=tk.Button(master=frame,text="=",padx=15,pady=5,width=9,command=equal) button_equal.grid(row=6,column=1,columnspan=3,pady=2) window.mainloop()
关键修改点
- 获取运算式并写入Text框:在
equal()函数中,先通过expr = entry.get()获取输入的运算式,再用TextB.insert(tk.END, f"{expr} = {y}\n")将运算式和结果格式化后插入Text框,每行一条记录便于查看。 - 优化Text框显示:给Text组件添加
height和width参数,避免默认过小的显示区域。 - 可选功能:如果需要点击clear按钮时清空Text框,可以取消
clear()函数中注释的TextB.delete(1.0, tk.END)代码。
内容的提问来源于stack exchange,提问作者user21041924
相关产品推荐
相关产品推荐

