python如何获取tkinter组件的名称?比如按下多个Button中的一个,返回这个被按下的Button的text?

不改需求的程序猿
  • 18
import tkinter as tk

window = tk.Tk()
window.title('计算器')
window.geometry('360x435')
window.attributes("-alpha", 0.95)
window.resizable(0, 0)#窗口大小固定,不能缩放

var = tk.StringVar()


frm_1 = tk.Frame(window, width=360, height=115, bg='CadetBlue').place(x=0, y=0, anchor=tk.NW)#数字显示区
frm_2 = tk.Frame(window, width=270, height=240, bg='DarkSeaGreen').place(x=0, y=115, anchor=tk.NW)#数字键盘
frm_3 = tk.Frame(window, width=90, height=320, bg='Beige').place(x=270, y=115, anchor=tk.NW)#加减乘除
frm_4 = tk.Frame(window, width=270, height=80, bg='CadetBlue').place(x=0, y=355, anchor=tk.NW)#不可循环输出的

var_result = tk.StringVar()
var_dian=tk.StringVar()
var_dian.set('.')


def name(u):
    u='var'+str(u)
    return u

#数字显示区
I = tk.Entry(frm_1,textvariable=var_result,font=('Arial',40),bg='grey')
I.place(x=0,y=0,width=360,height=115)
#获取数字显示区的文字

#函数部分

#计算结果的
def show_result():
    result = I.get()
    print(eval(result))

def delete():
    f.delete(1.0, tk.END)

def get():
    pass


num=1
#数字键盘,可循环显示的
for j in range(3):
    for i in range(3):

        m=0+(i)*90
        n=115+(j)*80
        b=tk.Button(frm_2,text=num,bg='WhiteSmoke',font=('Arial','20'),command=get)
        b.place(x=m,y=n,width=90,height=80)
        num=num+1
#数字键盘,不可循环显示的
v=0

a=tk.Button(frm_4,textvariable=var_dian,bg='Gainsboro',font=('20')).place(x=0,y=355,width=90,height=80)
b=tk.Button(frm_4,text='=',bg='Gainsboro',font=('20'),command=show_result).place(x=180,y=355,width=90,height=80)
f=tk.Button(frm_4,text='0',bg='WhiteSmoke',font=('Arial','20')).place(x=90,y=355,width=90,height=80)



#加减乘除
q=0
for p in ['+','-','*','/']:
    e=tk.Button(frm_3,text=p,bg='Gainsboro',font=('20')).place(x=270,y=115+q*80,width=90,height=80)
    q=q+1

window.mainloop()
回复
阅读 4.7k
2 个回答

来看下这个文档:http://effbot.org/tkinterbook...

研究下事件相关。然后你会发现【鼠标左键单击】【鼠标左键双击】等等的事件~

def get(*args):
    return args


b=tk.Button(frm_2,text=num,bg='WhiteSmoke',font=('Arial','20'))
b.bind('<Button-1>', func=get)

翻山越岭找到了解决办法,把button放到数组里边就可以了

array=[tk.Button(frm_4,text='=',bg='Gainsboro',font=('20'),command=get_result)]
for i in array:
    print(type(i))
    i.place(x=180,y=355,width=90,height=80)
    print(i.cget("text"))
    print(i["text"])
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏