【问题标题】:Pass widget name on button click在按钮单击时传递小部件名称
【发布时间】:2021-09-17 15:39:21
【问题描述】:

谁能帮忙,我需要生成 10 个按钮,然后当我点击它时,必须更改未命名按钮上的文本。

试图获取 event.widget 但没有成功

from tkinter import ttk

root = ttk()

def gonow(e):
    e.config(text="clicked")

for x in range(0, 10):

     ttk.Button(root, name="but"+x,width="30", height=3, text=x).grid( column=0, 
     r.ow=0, padx=10, pady=5)        

     butok=ttk.Button(root, width="30", height=3, text=x, command=lambda var="but"+x: 
     gonow(var)).grid( column=0, row=0, padx=10, pady=5)
    

if __name__ == "__main__":
    root.mainloop()

新的更新

                    b = tk.Button(frm_txt_json_case_btn, width="30", height=3, text=str(titulo+" "+cherep), fg=fcolor,relief=relifst, borderwidth=4,command=lambda titulo=titulo,wrd2srch=words2search,assumirrow=assumirrow,hiden_row=assumirrowr,resp_kib=resp_kiblog,repkib=repkib,urrrl=url_conf, jsump=jsonreq, explis=expectresq, frm_txt_json_case_tit=frm_txt_json_case_tit, inp_cond_protocol=inp_cond_protocol, resp_json=resp_json_input,lblexp=lblexpect, reqtxt=reqst_input,frm_txt_json_case_btn=frm_txt_json_case_btn: ChangConfWI(reqtxt, lblexp, frm_txt_json_case_tit, resp_json, inp_cond_protocol,urrrl, jsump, explis,frm_txt_json_case_btn,repkib,resp_kib,wrd2srch,hiden_row,assumirrow,titulo))
                    b.grid(column=colcount, row=rowcount, padx=10, pady=5)
                    buttonslst.append(b)

                    valbut=int(assumirrowr)-8
                    print(valbut)
                    print(buttonslst[valbut])
                    fvarbut=buttonslst[valbut]
                    print(fvarbut)

                    ttk.Button(frm_but_oknot, width="15", text="OK", image=photoOK, command=lambda assumirrow=assumirrow,filename=filename_report,exp=lblexpect,obs=resp_kiblog,urrrl=url_conf,tipo_de_conf=tipo_de_conf, resp_json_input=resp_json_input, reqst_input=reqst_input: savetoxls("geradorteste",resp_json_input,reqst_input, "OK",tipo_de_conf,urrrl,obs,exp,filename,assumirrow,fvarbut)).grid( column=0, row=0, padx=1, pady=15)
               

【问题讨论】:

  • 此代码将不会运行,首先。而你将一个整数传递给函数并调用config(),即int.config()
  • x 是索引,而不是实际的按钮。
  • 我知道,这只是一个例子,我不知道如何获取小部件的唯一标识符,他们使用配置调用它以更改文本

标签: python python-3.x tkinter


【解决方案1】:

当您将x 传递给gonow 时,它是按钮的索引,而不是按钮本身。您可以将按钮存储在列表中(注意:按钮,而不是 grid! 的结果),然后使用索引:

buttons = []
for x in range(0, 3):
     b = tk.Button(root, width=30, height=3, text=x, command=lambda x=x: gonow(buttons[x]))
     b.grid(column=0, row=x, padx=10, pady=5)
     buttons.append(b)

或者在按钮创建后推迟命令创建并传递按钮本身:

for x in range(0, 3):
     b = tk.Button(root, width=30, height=3, text=x)
     b.config(command=lambda b=b: gonow(b))
     b.grid(column=0, row=x, padx=10, pady=5)

(注意:您的代码中还有一些不相关的(语法)错误需要修复。)

【讨论】:

  • 谢谢,试过了,但没有通过:S。 [无,无,无,无,无]
  • @frepynow 你是什么意思,“它没有通过”?什么地方没有经过?那个清单是什么? buttons的列表?那是因为您将grid 的结果添加到列表中,而不是按钮本身!如果您执行b = Button(...).grid(...),那么b 不是 按钮,而是grid 的结果。
  • 天哪,我的坏:(谢谢你:)。问题是它传递了最后一个按钮的名称
  • @frepynow 在这种情况下,您可能忘记在 lambda 中执行 b=b,或者将其保留为 x=x,但将 b 传递给函数(搜索 lambda in loop 以获取那)
  • 请更新帖子。打印效果很好,但是当我尝试时它只通过了最后一个
猜你喜欢
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 2018-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多