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

修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:46:35