如何使用动态创建的同名按钮引用特定按钮?

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

我正在尝试根据 excel 文件中的条目数量动态创建按钮。

每一行按钮需要一个打开、编辑、收藏和删除按钮。 我正在尝试根据条目是否在收藏夹列表中以及按下时颜色切换来使相应的收藏夹按钮更改颜色。我知道如何使用按钮添加或删除收藏夹列表中的条目,但我不知道如何引用特定按钮以使其改变颜色。

我用 lambda 函数和命令尝试了一些“魔法”(我不完全理解),所以我可以在按下按钮时执行逻辑并引用条目,但我不知道如何按下特定按钮时的参考,因为它们的名称相同,我无法定义哪个按钮应该改变颜色,尽我最大的努力,我无法在文档、谷歌搜索等中找到丢失的信息……

我在贴代码,变量是用我的母语命名的,所以我不知道它会有多大用处,也充满了 print() 命令,因为我正在学习和试验,一般的意大利面条代码没有注释。无论谁看,上帝保佑你的理智和视力。

def testiranj_glup():
    tab_rjecnik = {
        "Doručak": lista_dorucak,
        "Ručak": lista_rucak,
        "Večera": lista_vecera,
        "Međuobrok": lista_meduobrok,
        "Salata": lista_salata,
        "Desert": lista_desert,
        "Cheat Day": lista_cheat
    }

    obrok = "Doručak"
    stranica_kuharice = tab_rjecnik[obrok]

    broj_gumbica = len(stranica_kuharice)

    visina_taba = (broj_gumbica / 5) * 600

    root = customtkinter.CTk()
    root.geometry("600x500")
    root.configure(fg_color='#1a1818')
    root.title('Kuharica')

    main_frame = customtkinter.CTkFrame(root)
    main_frame.pack(fill=customtkinter.BOTH, expand=1)
    main_frame.configure(fg_color="#1a1818")

    my_canvas = customtkinter.CTkCanvas(main_frame, background='#1a1818')
    my_canvas.pack(side=customtkinter.LEFT, fill=customtkinter.BOTH, expand=1)

    my_scrollbar = customtkinter.CTkScrollbar(
        main_frame,
        orientation=customtkinter.VERTICAL,
        command=my_canvas.yview)
    my_scrollbar.pack(side=customtkinter.RIGHT, fill=customtkinter.Y)

    my_canvas.configure(yscrollcommand=my_scrollbar.set)
    my_canvas.bind(
        '<Configure>',
        lambda e: my_canvas.configure(scrollregion=my_canvas.bbox("all")))

    my_canvas.bind_all(
        "<MouseWheel>",
        lambda e: my_canvas.configure(scrollregion=my_canvas.bbox("all")))

    second_frame = customtkinter.CTkFrame(my_canvas,
                                          width=800,
                                          height=visina_taba)
    second_frame.pack(fill=customtkinter.BOTH,
                      expand=1,
                      anchor=customtkinter.CENTER)
    my_canvas.create_window((0, 0), window=second_frame, anchor="nw")

    obrok = "Doručak"
    stranica_kuharice = tab_rjecnik[obrok]
    broj_gumbica = len(stranica_kuharice)

    y_pozicija = 0
    recept_broj = 0

    my_str = tk.StringVar()

    #l1 = tk.Label(second_frame, textvariable=my_str, width=1, height=25)
    #l1.pack(padx=10, pady=1 )

    def otvori_gumb_event(kunt_1):
        print(kunt_1)
        print('Doobi')
        print(otvori_gumb.cget('kunt1'))

    def edit_gumb_event(kunt_2):
        print(kunt_2)
        print('DUBI')
        print(edit_gumb.cget('textvariable'))

    def fav_gumb_event(kunt_3):
        print(kunt_3)
        print('DU')

    def testo_pesto(brojic):
        print(brojic)

        fav_g_recept_ime = stranica_kuharice.loc[kunt_3, 'naziv']

        item = stringnorm(fav_g_recept_ime).lower()

        print(mem_fav)
        print(item)
        print(item in mem_fav)

        for dugme in range(broj_gumbica):
            if item in mem_fav:
                print('TEST_CGET_1:' + str(dugme))
                print(dugme == kunt_3)
                if dugme == kunt_3:
                    print('TEST_CGET_2:' + str(dugme))
                    print(dugme == kunt_3)
                    fav_gumb.configure(fg_color='#2a1a06')
                    mem_fav.remove(item)
                    print('micem ' + item + ' iz favorita')

            else:
                print('test1')
                print(kunt_3)
                print('TEST_CGET_11:' + str(dugme))
                print(dugme == kunt_3)
                if dugme == kunt_3:
                    print(kunt_3)
                    print('TEST_CGET_22:' + str(dugme))
                    print(dugme == kunt_3)
                    print('test2')
                    fav_gumb.configure(fg_color='#fa9214')
                    mem_fav.append(item)
                    print('micem ' + item + ' iz favorita')

        if item in fav_add:
            print('')
        else:
            print('')

    def remove_gumb_event(kunt_4):
        my_str.set = ("REMOVE No is : " + str(kunt_4))
        print("REMOVE No is : " + str(kunt_4))
        print(str(my_str))
        print(kunt_4)
        print('peepee')

    for thing in range(broj_gumbica):

        ime_recepta = stranica_kuharice.loc[recept_broj, 'naziv']
        ime_za_gumb = str(thing)

        recept_imebox = customtkinter.CTkLabel(second_frame,
                                               width=200,
                                               height=25,
                                               text=ime_recepta,
                                               fg_color=("white", "#1a1818"),
                                               corner_radius=8)
        recept_imebox.pack(padx=10, pady=1)
        recept_imebox.place(x=5, y=y_pozicija)
        otvori_gumb = customtkinter.CTkButton(
            second_frame,
            text="Otvori",
            fg_color="#4ea47d",
            hover_color='#953c69',
            border_color='#8d8880',
            command=lambda kunt_1=thing: otvori_gumb_event(kunt_1),
            width=90,
            height=25,
            text_color=("gray10", "#DCE4EE"))
        otvori_gumb.pack(padx=10, pady=1)
        otvori_gumb.place(x=215, y=y_pozicija)

        edit_gumb = customtkinter.CTkButton(
            second_frame,
            text='uredi',
            fg_color="#4ea47d",
            hover_color='#953c69',
            border_color='#8d8880',
            command=lambda kunt_2=thing: edit_gumb_event(kunt_2),
            width=90,
            height=25,
            text_color=("gray10", "#DCE4EE"))
        edit_gumb.pack(padx=10, pady=1)
        edit_gumb.place(x=320, y=y_pozicija)

        boja = '#2a1a06'
        item_ugumbu_f = stringnorm(ime_recepta).lower()
        if item_ugumbu_f in mem_fav:
            boja = "#fa9214"
        if item_ugumbu_f in fav_add:
            boja = "#fa9214"

        #

        fav_gumb = customtkinter.CTkButton(
            second_frame,
            text="★",
            fg_color=boja,
            hover_color='#953c69',
            border_color='#8d8880',
            command=lambda kunt_3=thing: fav_gumb_event(kunt_3),
            width=50,
            height=25,
            text_color=("gray10", "#ffffff"))
        fav_gumb.pack(padx=10, pady=1)
        fav_gumb.place(x=420, y=y_pozicija)

        recept_gumb_var = str(recept_broj)

        remove_gumb = customtkinter.CTkButton(
            second_frame,
            text="❌",
            fg_color="#c30000",
            textvariable=remove_gumb_event,
            command=lambda kunt_4=thing: remove_gumb_event(kunt_4),
            hover_color='#953c69',
            border_color='#c30000',
            width=50,
            height=25,
            text_color=("gray10", "#ffffff"))
        remove_gumb.pack(padx=10, pady=1)
        remove_gumb.place(x=480, y=y_pozicija)

        #pomakni red
        y_pozicija += 40
        recept_broj += 1
        print(y_pozicija)

    root.mainloop()

注意:我真的是编程新手。

python tkinter button dynamic
© www.soinside.com 2019 - 2024. All rights reserved.