修改CustomTkinter示例代码遇AttributeError:无sidebar_button_event属性
问题排查与解决
错误原因很明确:你将sidebar_button_event定义为__init__方法内的局部函数,但按钮的command参数中使用的self.sidebar_button_event是在尝试访问App类的成员方法,两者作用域不匹配,导致找不到该方法,触发AttributeError。
修改方案
将sidebar_button_event重构为App类的成员方法,调整位置到类层级(与__init__同级),并为方法添加self参数:
import sys import customtkinter customtkinter.set_appearance_mode("System") # Modes: "System" (standard), "Dark", "Light" customtkinter.set_default_color_theme("blue") # Themes: "blue" (standard), "green", "dark-blue" class App(customtkinter.CTk): current_speed = 0 current_direction = "Clockwise" current_steps = 0 def __init__(self): super().__init__() # Begin row count r=0 # Set column to 0 c=0 # Set speed entry current_speed=0 # Set direction current_direction=f"Clockwise" # Set steps per feeding current_steps_feeding=200 # configure window self.title("Motor Options") self.geometry(f"{750}x{385}") # create sidebar frame with widgets self.sidebar_frame = customtkinter.CTkFrame(self, width=750, corner_radius=0) self.sidebar_frame.grid(row=0, column=c, rowspan=3, sticky="nsew") self.logo_label = customtkinter.CTkLabel(self.sidebar_frame, text="Motor Options", font=customtkinter.CTkFont(size=20, weight="bold")) self.logo_label.grid(row=r, column=c, columnspan=4, padx=20, pady=(10,10)) r +=1 self.logo_label = customtkinter.CTkLabel(self.sidebar_frame, text="Speed", font=customtkinter.CTkFont(size=20, weight="bold")) self.logo_label.grid(row=r, column=c, padx=20, pady=(10,10)) # Speed up c +=1 self.sidebar_button_1 = customtkinter.CTkButton(self.sidebar_frame, command=lambda: self.sidebar_button_event(1)) self.sidebar_button_1.grid(row=r, column=c, padx=20, pady=(10,10)) # Speed down c +=1 self.sidebar_button_2 = customtkinter.CTkButton(self.sidebar_frame, command=lambda: self.sidebar_button_event(2)) self.sidebar_button_2.grid(row=r, column=c, padx=20, pady=(10,10)) # create Speed entry box c +=1 self.entry_speed = customtkinter.CTkEntry(self.sidebar_frame, placeholder_text=current_speed) self.entry_speed.grid(row=r, column=c, padx=20, pady=(10,10)) # Cancel r +=1 self.sidebar_button_16 = customtkinter.CTkButton(self.sidebar_frame, command=lambda: self.sidebar_button_event(16)) self.sidebar_button_16.grid(row=r, column=c, padx=20, pady=(10,10)) # set default values self.sidebar_button_1.configure(text="Faster") self.sidebar_button_2.configure(text="Slower") self.sidebar_button_16.configure(text="Cancel") def sidebar_button_event(self, buttonNum): if buttonNum == 1: print(f"Faster") print(f"Attempt to increase speed beyond 100, speed set to 100") elif buttonNum == 2: print(f"Slower") elif buttonNum == 16: print(f"Cancel") sys.exit(0) if __name__ == "__main__": app = App() app.mainloop()
内容的提问来源于stack exchange,提问作者Greg W
相关产品推荐
相关产品推荐

