在类中调用函数对我不起作用

2024-04-20 12:18:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用tkinter做一个按钮,当按下这个按钮时,它会删除屏幕上的所有按钮,然后当我调用原始按钮的函数时,它会使它们重新出现。这是我的意图,但我不能使它发挥作用。你知道吗

class login_screen:

    def __init__(self, master):
        self.master = master

        def menu_buttons():
            self.login_button = Button(master,
                              text="Login",
                              command=self.login,
                              relief=RIDGE,
                              height=2,
                              width=7,
                              bg="#ffb380")

            self.register_button = Button(master,
                              text="Register",
                              command=self.register,
                              relief=RIDGE,
                              height=2,
                              width=7,
                              bg="#ffb380")

            self.login_button.place(x=95, y=90)
            self.register_button.place(x=95, y=155)

        menu_buttons()


    def clear(self):
        self.login_button.destroy()
        self.register_button.destroy()

    def login(self):
        self.clear()
        menu_buttons()

错误:

NameError: name 'menu_buttons' is not defined

当我按下“登录”按钮时,它会清除所有内容,然后再次显示相同的按钮。目前它只会消失,但不会再出现。你知道吗


Tags: textselfmasterregisterdefloginbutton按钮
3条回答

你应该使用菜单按钮方法 然后将自变量传递给菜单按钮

def menu_buttons(self):

目前,菜单按钮只能由init方法访问,其他方法无法访问。你知道吗

不需要完全销毁按钮,因此不需要尝试在init中重新创建它们,因为它们仍然存在但不可见。你知道吗

class login_screen:

    def __init__(self, master):
        self.master = master
        self.login_button = Button(master,
                                   text="Login",
                                   command=self.login,
                                   relief=RIDGE,
                                   height=2,
                                   width=7,
                                   bg="#ffb380")

        self.register_button = Button(master,
                                      text="Register",
                                      command=self.register,
                                      relief=RIDGE,
                                      height=2,
                                      width=7,
                                      bg="#ffb380")

    def place_buttons()
        self.login_button.place(x=95, y=90)
        self.register_button.place(x=95, y=155)

    def clear(self):
        self.login_button.place_forget()
        self.register_button.place_forget()

    def login(self):
        self.clear()
        self.place_buttons()

如果您试图重用menu_buttons,请不要在__init__中定义它,因为函数将在__init__完成后立即消失,因此您将无法再次调用它:

class login_screen:

    def __init__(self, master):
        self.master = master
        self.menu_buttons()


    # define the function here, so it can re-run
    def menu_buttons(self):
        self.login_button = Button(self.master,
                          text="Login",
                          command=self.login,
                          relief=RIDGE,
                          height=2,
                          width=7,
                          bg="#ffb380")

        self.register_button = Button(self.master,
                          text="Register",
                          command=self.register,
                          relief=RIDGE,
                          height=2,
                          width=7,
                          bg="#ffb380")

        self.login_button.place(x=95, y=90)
        self.register_button.place(x=95, y=155)


    def clear(self):
        self.login_button.destroy()
        self.register_button.destroy()

    def login(self):
        self.clear()
        # call self.menu_buttons to re-initialize
        self.menu_buttons()



相关问题 更多 >