我正在尝试在创建循环时更改按钮命令。 使用它来更改数据库控件中的值,但按钮不更改。
具体代码:
camposDinamicosBE[i].configure(command=lambda baixaBTN=i:[ buildGerarBaixa(prodID='1')])
print(f'comando {i}= ',camposDinamicosBE[i].cget('command'))
错误:
显示最后一个 i 值的所有命令(在我的例子中为 36),但是用于了解正在发生的情况的打印命令始终显示随机数,我看不到发生了什么。 print(f'comando {i}= ',camposDinamicosBE[i].cget('command')) 显示:
。 。 .
comando 34= 1409460431232<lambda>
comando 35= 1409460432832<lambda>
comando 36= 1409460416256<lambda
但是按下按钮时命令提示符始终显示:36
出现问题的部分代码:
for i in range(0, campos):
label_box = Label(frame_aba1,text=valores[i]["produto"],font=('Calibri 8 bold '),bg='#D8D8D8')
entry_box = Entry(frame_aba1,width=15,font=('Calibri 8 '),name='entry_'+str(variavel.lower()))
entry_boxPd = Entry(frame_aba1,width=15,font=('Calibri 8 '),name='entry_'+str(variavelPD.lower()),bg='peachpuff',fg='indianred')
label_atual = Label(frame_aba1,text='0',font=('Calibri 10 bold '),bg='#D8D8D8',fg='blue',anchor='n',justify='center',height=1)
#here is the problem
baixaBTN = Button(frame_aba1, text =f"🚚",font=('Calibri 11 bold '),command= lambda baixaBTN=i:[ buildGerarBaixa(prodID='f{i}')], bg =cinzaClaro,anchor='e')
if(i-1<=math.ceil(campos/2)):
linha=0
lin=i
label_box.place(x=linha+100, y=100+(22*lin))
entry_box.place(x=linha+400, y=100+(22*lin),height=17,width=40)
entry_boxPd.place(x=linha+450, y=100+(22*lin),height=17,width=40)
label_atual.place(x=linha+500, y=100+(22*lin))
baixaBTN.place(x = linha+70, y = 100+(22*lin),width = 22,height=20)`
我已经尝试了在论坛和 Google 上找到的所有内容,但按钮不起作用。其他一切都 100% 正常工作
我想要的是在每个列出的项目旁边的循环中创建按钮,并且当单击它时,它会调用一个传递所单击按钮的 id 的特定函数。这样我就可以单独管理银行中的项目,例如激活、停用、更改值......
我刚刚找到了一个完美运行的解决方案,我将其发布,以防其他人也需要它。我仍然不知道为什么打印出来时会出现这些随机数,然后结果总是相同的,如果有人可以解释那就太好了,但这已经解决了我现在的问题。
我现在需要弄清楚如何在标签中创建链接并给它一个命令,但如果有人可以在这里回答,那就太好了。如果由于论坛规则我不能,我会理解。无论如何,解决方案如下:
my_str = tk.StringVar()
l1 = tk.Label(my_w, textvariable=my_str, width=10 )
l1.grid(row=0,column=1,columnspan=5)
def show_lan(my_language):
my_str.set(my_language)
list_languages = ("PHP","Python","HTML","Tkinter")
var = 0
for language in list_languages:
btn = tk.Button(my_w, text=language, command=lambda
lan=language:show_lan(lan))
btn.grid(row=1,column=var)
var += 1
解决方案在这里找到:https://www.plus2net.com/python/tkinter-button-dynamic.php