You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

循环创建CustomTkinter按钮时,点击无法正确禁用对应按钮的问题

循环生成CustomTkinter按钮时点击仅禁用最后一个的问题解决

我通过循环从列表生成CustomTkinter按钮,已实现按钮创建及点击返回值功能,但遇到按钮状态修改问题:无论点击哪个按钮,仅会禁用列表中最后一个按钮。尝试过多种修复方案,均无效或无法实现按钮悬停、启用/禁用等正常功能。

初始代码

import customtkinter

class App(customtkinter.CTk):
    def __init__(self):
        super().__init__()

        bn = 0

        schedule_list = ["On", "Off", "NA"]
        button_dict = {}

# create scrollable frame

        self.scrollable_frame = customtkinter.CTkScrollableFrame(self, width=750, height=385)
        self.scrollable_frame.grid(row=0, column=0, sticky="nsew")
        self.scrollable_frame.grid_columnconfigure(0, weight=1)
        self.scrollable_frame_switches = []

#   setup the schedule list

        c = 0
        l = 0
        r = 0

        for j in range(3):
            bn += 1
    # create the buttons
            self.button = customtkinter.CTkButton(self.scrollable_frame, command=lambda bn=bn: self.button_event(bn))
            self.button.grid(row=r, column=c, padx=20, pady=(10, 10))
            self.button.configure(text=schedule_list[l])
            self.scrollable_frame_switches.append(self.button)

            l += 1
            c += 1


    def button_event(self,button_num):

        self.button.configure(state="disabled")

        print(button_num)

#      if buttonNum == 1:

if __name__ == "__main__":
    app = App()
    app.mainloop()

解决方案(已实现功能)

我调整了两处代码解决了问题,方法虽不够优雅但可正常使用:

  1. 修改按钮创建代码:
    将原来的按钮定义:
    self.button = customtkinter.CTkButton(self.scrollable_frame, command=lambda bn=bn: self.button_event(bn))
    替换为:
    self.button = customtkinter.CTkButton(self.scrollable_frame, command=lambda bn=bn: self.button_event(bn,self.scrollable_frame_switches))

  2. 更新button_event方法:
    原方法:

def button_event(self, button_num):
        self.button_change.configure(state="disabled")

#      if buttonNum == 1:

修改为:

def button_event(self, button_num, switches):
        button_change=self.scrollable_frame_switches[button_num]
        button_change.configure(state="disabled")
        self.scrollable_frame_switches.append(button_change)

内容的提问来源于stack exchange,提问作者Greg W

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 06:11:26