Python 我的代码中有两个不同的错误,一个是类错误,另一个是登录函数错误

Python 我的代码中有两个不同的错误,一个是类错误,另一个是登录函数错误,python,python-3.x,class,tkinter,Python,Python 3.x,Class,Tkinter,回溯(最近一次呼叫最后一次): 文件“H:\PythonGroupWork\Python Code\tests\login.py”,第4行,在 类tits(): 文件“H:\PythonGroupWork\Python Code\tests\login.py”,第97行,在tits中 登录() TypeError:Login()缺少1个必需的位置参数:“self” from tkinter import * import os class login: creds = 'H:\\Py

回溯(最近一次呼叫最后一次):

文件“H:\PythonGroupWork\Python Code\tests\login.py”,第4行,在 类tits():

文件“H:\PythonGroupWork\Python Code\tests\login.py”,第97行,在tits中 登录()

TypeError:Login()缺少1个必需的位置参数:“self”

from tkinter import *
import os

class login:

    creds = 'H:\\PythonGroupWork\\Logins\\users.txt'# This just sets the variable creds to 'tempfile.temp'

    def Signup(self): # This is the signup definition,
        global pwordE # These globals just make the variables global to the entire script, meaning any definition can use them
        global nameE
        global roots

        roots = Tk() # This creates the window, just a blank one.
        roots.title('Signup') # This renames the title of said window to 'signup'
        intruction = Label(roots, text='Please Enter new Credidentials\n') # This puts a label, so just a piece of text saying 'please enter blah'
        intruction.grid(row=0, column=0, sticky=E) # This just puts it in the window, on row 0, col 0. If you want to learn more look up a tkinter tutorial :)

        nameL = Label(roots, text='New Username: ') # This just does the same as above, instead with the text new username.
        pwordL = Label(roots, text='New Password: ') # ^^
        nameL.grid(row=1, column=0, sticky=W) # Same thing as the instruction var just on different rows. :) Tkinter is like that.
        pwordL.grid(row=2, column=0, sticky=W) # ^^

        nameE = Entry(roots) # This now puts a text box waiting for input.
        pwordE = Entry(roots, show='*') # Same as above, yet 'show="*"' What this does is replace the text with *, like a password box :D
        nameE.grid(row=1, column=1) # You know what this does now :D
        pwordE.grid(row=2, column=1) # ^^

        signupButton = Button(roots, text='Signup', command=FSSignup) # This creates the button with the text 'signup', when you click it, the command 'fssignup' will run. which is the def
        signupButton.grid(columnspan=2, sticky=W)
        roots.mainloop() # This just makes the window keep open, we will destroy it soon

    def FSSignup(self):
        with open(creds, 'w') as f: # Creates a document using the variable we made at the top.
            f.write(nameE.get()) # nameE is the variable we were storing the input to. Tkinter makes us use .get() to get the actual string.
            f.write('\n') # Splits the line so both variables are on different lines.
            f.write(pwordE.get()) # Same as nameE just with pword var
            f.close() # Closes the file

        roots.destroy() # This will destroy the signup window. :)
        Login() # This will move us onto the login definition :D

    def Login(self):
        global nameEL
        global pwordEL # More globals :D
        global rootA

        rootA = Tk() # This now makes a new window.
        rootA.title('Login') # This makes the window title 'login'

        intruction = Label(rootA, text='Please Login\n') # More labels to tell us what they do
        intruction.grid(sticky=E) # Blahdy Blah

        nameL = Label(rootA, text='Username: ') # More labels
        pwordL = Label(rootA, text='Password: ') # ^
        nameL.grid(row=1, sticky=W)
        pwordL.grid(row=2, sticky=W)

        nameEL = Entry(rootA) # The entry input
        pwordEL = Entry(rootA, show='*')
        nameEL.grid(row=1, column=1)
        pwordEL.grid(row=2, column=1)

        loginB = Button(rootA, text='Login', command=CheckLogin) # This makes the login button, which will go to the CheckLogin def.
        loginB.grid(columnspan=2, sticky=W)

        rmuser = Button(rootA, text='Delete User', fg='red', command=DelUser) # This makes the deluser button. blah go to the deluser def.
        rmuser.grid(columnspan=2, sticky=W)
        rootA.mainloop()

    def CheckLogin(self):
        with open(creds) as f:
            data = f.readlines() # This takes the entire document we put the info into and puts it into the data variable
            uname = data[0].rstrip() # Data[0], 0 is the first line, 1 is the second and so on.
            pword = data[1].rstrip() # Using .rstrip() will remove the \n (new line) word from before when we input it

        if nameEL.get() == uname and pwordEL.get() == pword: # Checks to see if you entered the correct data.
            r = Tk() # Opens new window
            r.title(':D')
            r.geometry('150x50') # Makes the window a certain size
            rlbl = Label(r, text='\n[+] Logged In') # "logged in" label
            rlbl.pack() # Pack is like .grid(), just different
            r.mainloop()
        else:
            r = Tk()
            r.title('D:')
            r.geometry('150x50')
            rlbl = Label(r, text='\n[!] Invalid Login')
            rlbl.pack()
            r.mainloop()

    def DelUser(self):
        os.remove(creds) # Removes the file
        rootA.destroy() # Destroys the login window
        Signup() # And goes back to the start!

    if os.path.isfile(creds):
        Login()
    else: # This if else statement checks to see if the file exists. If it does it will go to Login, if not it will go to Signup :)
        Signup()

self
未传递给函数,请更改为
Login()
Signup()
…而且缩进似乎不正确。我已经完成了,但现在它给了我一个新的错误。检查我的编辑以获取详细信息固定缩进…如果您想调用这些函数,它们是类的一部分
登录
请参阅有关如何从类中调用方法的示例,据我所知,我确信没有任何缩进问题。正如发布的
if os.path.isfile(creds):
似乎不属于任何方法,对吗?