如何在每个按钮上使用动态命令循环

问题描述 投票:0回答:1

我正在尝试在创建循环时更改按钮命令。 使用它来更改数据库控件中的值,但按钮不更改。

具体代码:

    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 的特定函数。这样我就可以单独管理银行中的项目,例如激活、停用、更改值...... enter image description here

loops button lambda dynamic
1个回答
0
投票

我刚刚找到了一个完美运行的解决方案,我将其发布,以防其他人也需要它。我仍然不知道为什么打印出来时会出现这些随机数,然后结果总是相同的,如果有人可以解释那就太好了,但这已经解决了我现在的问题。

我现在需要弄清楚如何在标签中创建链接并给它一个命令,但如果有人可以在这里回答,那就太好了。如果由于论坛规则我不能,我会理解。无论如何,解决方案如下:

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

© www.soinside.com 2019 - 2024. All rights reserved.