登录和注册按钮不起作用(python,tkinter)

时间:2015-02-22 04:47:29

标签: python tkinter freeze

当我运行它时,两个按钮显示但是当我按下“登录”时,此错误显示:

inputDialog2 = LogIn(root)
TypeError: LogIn() takes no arguments (1 given)

如果按“注册”,则此错误显示:

self.Label1 = Label(top, text = "What is your username: ")
AttributeError: Label instance has no __call__ method

这是我的代码:

from Tkinter import *

#  User Registers an account with a username password and passwor retype.

class Main:
def __init__(self, parent):
    top = self.top = Toplevel(parent)

    self.Label = Label(top, text = 'Choose an option')
    self.Label.grid(row = 0)

    self.LoginB = Button(top, text = 'Log In', command = LogIn)
    self.LoginB.pack()

    self.RegisterB = Button(top, text = 'Register', command = launch_register)
    self.RegisterB.pack()

    Main().pack()


class Register:
def __init__(self, parent):
    top = self.top = Toplevel(parent)

    self.VarEntUser = StringVar()
    self.VarEntPass = StringVar()
    self.VarEntRetype = StringVar()

    self.Label1 = Label(top, text = "What is your username: ")
    self.Label2 = Label(top, text = "Enter a password: ")
    self.Label3 = Label(top, text = "Retype Password: ")
    self.EntUser = Entry(top, textvariable = self.VarEntUser )
    self.EntPass = Entry(top, textvariable = self.VarEntPass)
    self.EntRetype = Entry(top, textvariable = self.VarEntRetype)


    self.Label1.grid(row = 0, sticky = W)
    self.Label2.grid(row = 1, sticky = W)
    self.Label3.grid(row = 2, sticky = W)
    self.EntUser.grid(row = 0, column = 1)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
    self.EntPass.grid(row = 1, column = 1)
    self.EntRetype.grid(row = 2, column = 1)



    self.MySubmitButton = Button(top, text = 'Submit', command=RegisterCheck)
    self.MySubmitButton.pack()

    self.U = raw_input(self.VarEntUser.get())
    self.P = raw_input(self.VarEntPass.get())
    self.R = raw_input(self.VarEntRetype.get())

class LogIn:
def __init__(self, parent):
    top = self.top = Toplevel(parent)



    VarUserLog = StringVar()
    VarPassLog = StringVar()

    self.LabelUser = Label(top, text = 'Username:')
    self.EntUserLog = Label(top, text = 'Password: ')

    self.EntUserLog = Entry(top, textvariable = self.VarUserLog)
    self.EntPassLog = Entry(top, textvariable = self.VarPassLog)

    self.UserLog.grid(row = 1)
    self.PassLog.grid(row = 2)
    self.EntUserLog.grid(row = 1, column = 1)
    self.EntPassLog.grid(row = 2, column = 1)
    #  runs the 'LoginCheck' function
    self.LogInButton = Button(top, text = "Log In", command = LogInCheck)

    self.User = raw_input(self.EntUserLog.get())
    self.Pass = raw_input(self.EntUserLog.get())






#  Checks the Log In details
def LogInCheck():
if len(self.User) <= 0 and len(self.Pass) <= 0:
    print "Please fill in all fields."

else:
    pass



if self.User in 'username.txt' and self.Pass in 'password':
         print 'You are now logged in!'

else:
    print "Log in Failed"



#  Checks the password and checks if all fields have been entered
def RegisterCheck(self):
if len(self.P) <= 0 and len(self.U) <= 0:
        print "Please fill out all fields."
else:
    pass
if self.P == self.R:
      pass

else:
    print "Passwords do not match"

with open('username.txt', 'a') as fout:
     fout.write(self.U + '\n')

with open('password.txt', 'a') as fout:
     fout.write(self.P + '\n')      

def launch_register():
inputDialog = Register(root)
root.wait_window(inputDialog.top)

def LogIn():
inputDialog2 = LogIn(root)
root.wait_window(inputDialog2.top)

#  Main Window--    
root = Tk()



Label = Label(root, text = 'Choose an option')
Label.pack()

LoginB = Button(root, text = 'Log In', command = LogIn)
LoginB.pack()

RegisterB = Button(root, text = 'Register', command = launch_register)
RegisterB.pack()




root.mainloop()

1 个答案:

答案 0 :(得分:2)

程序中导致这些错误的错误:

  1. 首先声明一个名为LogIn的类;但是您稍后会创建一个具有相同名称的函数。由于后者会覆盖前者,因此调用方法而不是类构造函数。

  2. 同样,在行Label = Label(root, text = 'Choose an option')中,您为名称Label指定了新的含义,这样当您到达发生第二个错误的行时,名称{{1不再引用名为Label的类,而是引用该类的实例。

  3. 基本上,您应该为变量,函数和类使用唯一的名称(包括从Tkinter等模块导入的名称)。

相关问题