【发布时间】:2013-03-16 00:40:44
【问题描述】:
我通过循环列表动态创建了一个按钮:
AuxName = Button(GUI_1, text=List_Aux[x], font=("Arial", 10))
tk_rgb = "#%02x%02x%02x" % (0,0,0)
AuxName["fg"] = tk_rgb
tk_rgb = "#%02x%02x%02x" % (255,255,255)
AuxName["bg"] = tk_rgb
AuxName.place(x=BUTTON_LEFT_AUX1, y=BUTTON_TOP_AUX1 , height=BUTTON_HEIGTH_AUX1, width=BUTTON_WIDTH_AUX1)
AuxName["command"] = ButtonClick
每个按钮都有一个不同的 AuxName 值(1btn1、1btn2、1btn3 等)编号,即每个按钮所在的列和行。
我遇到的问题是,现在我希望函数 ButtonClick 获取被点击按钮的名称。
我尝试的最后一件事是:
def ButtonClick():
1btn1["text"] = "Goodbye"
但是 python 会抛出一个语法错误(并且指向左括号之前)。
如何获取最后点击的按钮名称,然后通过函数ButtonClick()更改其文本?
-------- 编辑第一个答案,现在几乎可以完美运行------------
感谢您的回答,非常感谢,并使其工作几乎完美。 有两个缺陷,首先是它会抛出一个错误,因为发送的命令 ButtonClick 没有参数,这是发送按钮绑定命令的默认方式,所以我真的不知道如何解决这个问题...... 第二个是,在使用您提供给我的代码后,按钮文本会按照您指定的方式更改,但它们不会尊重我之前定义的位置和大小。
BUTTON_TOP_AUX1 = 20
BUTTON_WIDTH_AUX1 = 400
BUTTON_LEFT_AUX1 = 5
BUTTON_HEIGTH_AUX1 = 20
Buttons_Function = "DesiredFunctionOne"
BUTTON_COLUMN_AUX1 = 1
List_Size_Aux = len(List_Aux)
for x in range ( List_Size_Aux ):
AuxName = str(BUTTON_COLUMN_AUX1)+'btn'+str(x)
AuxName = Button(GUI_1, text=List_Aux[x], font=("Arial", 10))
tk_rgb = "#%02x%02x%02x" % (0,0,0)
AuxName["fg"] = tk_rgb
tk_rgb = "#%02x%02x%02x" % (255,255,255)
AuxName["bg"] = tk_rgb
AuxName.place(x=BUTTON_LEFT_AUX1, y=BUTTON_TOP_AUX1 , height=BUTTON_HEIGTH_AUX1, width=BUTTON_WIDTH_AUX1)
AuxName["command"] = ButtonClick
BUTTON_TOP_AUX1 = BUTTON_HEIGTH_AUX1+BUTTON_TOP_AUX1
AuxName.bind("<Button-1>", ButtonClick)
AuxName.pack()
您能告诉我如何解决这些问题吗? 非常感谢:)
【问题讨论】:
-
编辑了关于当前状态的问题,谢谢
-
我已经用更详细的解决方案更新了答案
标签: python button text tkinter