循环创建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()
解决方案(已实现功能)
我调整了两处代码解决了问题,方法虽不够优雅但可正常使用:
修改按钮创建代码:
将原来的按钮定义: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))更新
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
相关产品推荐
相关产品推荐

