使用python从类中返回变量

时间:2015-12-14 11:59:50

标签: python tkinter

嘿我试图从班级中获取一个变量,但由于某种原因它没有通过。它可能非常简单,但我真的无法想到任何事情

以下是尚未完成的代码我还只创建了一个登录屏幕:

from tkinter import *
import tkinter.messagebox as tm
correct = False
#-------------Functions-----------------------------------------------------

class LoginMenu(Frame):
    def __init__(self, master):
        super().__init__(master)

        self.label_2 = Label(self, text="Welcome to the rota system")
        self.label_3 = Label(self, text="Please enter the password to continue:")
        self.label_1 = Label(self, text="Password")

        self.entry_1 = Entry(self)

        self.label_1.grid(row=3, sticky=W)
        self.label_2.grid(row=1, sticky=W)
        self.label_3.grid(row=2, sticky=W)
        self.entry_1.grid(row=3, sticky=W)


        self.logbtn = Button(self, text="Login", command = self.login_btn_clicked)
        self.logbtn.grid(columnspan=2)

        self.pack()

    def login_btn_clicked(self):

        password = self.entry_1.get()

        if password == "1234":
            correct = True

        else:
            tm.showerror("Login error", "Incorrect password")
        return correct



#-----------------Main-Program----------------------------------------------

window = Tk()
LoginMenu(window)
if correct == True:
    print("Yay")
    LoginMenu.self.destroy()
window.mainloop()

2 个答案:

答案 0 :(得分:3)

班级中的变量只有本地范围。

一种好方法是将变量correct定义为类成员:

class LoginMenu(Frame):
    def __init__(self, master):
        super().__init__(master)
        self.correct = False

然后在你的函数中设置它:

def login_btn_clicked(self):

        password = self.entry_1.get()

        if password == "1234":
            self.correct = True

您可以通过全球范围访问它(不需要== True,顺便说一句)

loginmenu = LoginMenu(window)
if loginmenu.correct:

问题是,这在你的情况下不会起作用。您在if构造后输入主循环。请查看Tkinter文档如何正确构建Tkinter应用程序。

答案 1 :(得分:1)

要在本地范围内引用全局变量,您必须在类中定义该变量,如下所示:

global correct

(在函数login_btn_clicked中)