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

Tkinter点击按钮报错MyFrame无toggleBTN_INVENTORY属性如何解决

问题原因

报错'MyFrame' object has no attribute 'toggleBTN_INVENTORY'是三个代码写法问题导致的:

  • 在__init__构造方法里创建按钮、输入框控件时,没有给变量加self.前缀,这些控件仅为构造方法内的局部变量,类的其他实例方法无法访问
  • Click_SearchBox、SEARCH两个功能函数定义在了MyFrame类外部,类内部绑定self.SEARCH、self.Click_SearchBox时找不到对应方法
  • 事件绑定的回调函数参数顺序错误,类的实例方法第一个参数固定为self,事件对象应作为第二个参数传入
修改步骤
  • 所有需要在类的其他方法中访问的控件,创建时都加上self.前缀转为实例属性,涉及控件包括toggleBTN_INVENTORY、toggleBTN_INPUT、toggleBTN_OUTPUT、BTN_SEARCH、SearchBox;用于标记当前模式的MODE变量也建议改为实例属性,避免作用域失效
  • 将Click_SearchBox、SEARCH两个方法缩进放入MyFrame类内部,修正参数顺序
  • 统一所有方法内的控件、变量引用名,和加了self.前缀的实例属性名保持一致
修正后可运行代码
import tkinter as tk
import tkinter.font

class MyFrame(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)

        self.master = master
        self.master.title("INVENTORY CONTROL PROGRAM")
        self.pack(fill = "both", expand=True)

        self.MODE = "INVENTORY"
        font01 = tkinter.font.Font(family="맑은 고딕", size = 25)
        font02 = tkinter.font.Font(family="맑은 고딕", size = 20)

        # MAIN MENU FRAME
        frame1 = tk.Frame(self, relief="solid")
        frame1.grid(column = 0, row = 0)

        self.toggleBTN_INVENTORY = tk.Button(self, padx = 40, pady = 1, text = "BTN A", font = font01, bg = "gray", command = self.INVENTORY_MODE)
        self.toggleBTN_INPUT     = tk.Button(self, padx = 40, pady = 1, text = "BTN B", font = font01, bg = "SystemButtonFace", command = self.INPUT_MODE)
        self.toggleBTN_OUTPUT    = tk.Button(self, padx = 40, pady = 1, text = "BTN C", font = font01, bg = "SystemButtonFace", command = self.OUTPUT_MODE)
        self.BTN_SEARCH          = tk.Button(self, padx = 40, pady = 1, text = "BTN D", font = font01, bg = "SystemButtonFace", command = self.SEARCH)

        self.SearchBox = tk.Entry(self, width = 30, font = font01)
        self.SearchBox.insert(0, " SEARCH")
        self.SearchBox.bind("<Button-1>", self.Click_SearchBox)

        self.toggleBTN_INVENTORY.grid(column = 0, row = 0, pady = 10)
        self.toggleBTN_INPUT.grid(column = 1, row = 0, pady = 10)
        self.toggleBTN_OUTPUT.grid(column = 2, row = 0)
        self.SearchBox.grid(column = 3, row = 0, ipady = 15)
        self.BTN_SEARCH.grid(column = 4, row = 0)

    
    def INVENTORY_MODE(self):
        self.MODE = "INVENTORY"
        self.toggleBTN_INVENTORY.config(bg = "gray")
        self.toggleBTN_INPUT.config(bg = "SystemButtonFace")
        self.toggleBTN_OUTPUT.config(bg = "SystemButtonFace")
        print(self.MODE)

    def INPUT_MODE(self):
        self.MODE = "INPUT"
        self.toggleBTN_INVENTORY.config(bg = "SystemButtonFace")
        self.toggleBTN_INPUT.config(bg = "gray")
        self.toggleBTN_OUTPUT.config(bg = "SystemButtonFace")
        print(self.MODE)

    def OUTPUT_MODE(self):
        self.MODE = "OUTPUT"
        self.toggleBTN_INVENTORY.config(bg = "SystemButtonFace")
        self.toggleBTN_INPUT.config(bg = "SystemButtonFace")
        self.toggleBTN_OUTPUT.config(bg = "gray")
        print(self.MODE)

    def Click_SearchBox(self, event) :
        TEXT = self.SearchBox.get()
        if(TEXT == " SEARCH") :
            self.SearchBox.delete(0, "end")

    def SEARCH(self):
        GET_SearchBox = self.SearchBox.get()
        print("SEARCH for [ " + GET_SearchBox + " ]")


def main():
    root = tk.Tk()
    root.wm_attributes('-fullscreen', True)
    app = MyFrame(root)
    root.mainloop()


if __name__ == '__main__':
    main()

内容的提问来源于stack exchange,提问作者Hyunwoo Choi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:30:46