Python Tkinter按钮复制

Python Tkinter按钮复制,python,tkinter,Python,Tkinter,我相信答案很明显,但是我已经尝试了这么长时间,我觉得我需要一些帮助。 基本上,我在Tkinter中有一个主注册窗口,可以按login或register。当我按下其中一个按钮时,登录和注册窗口就会出现,这就是它应该做的,所以这很好。但是,在主注册窗口中,每次单击其中一个按钮时,按钮都会重复。例如,当我按下“登录”按钮时,每次单击“登录”和“注册”按钮都会在主窗口中复制 from tkinter import * import os class main(object): def __ini

我相信答案很明显,但是我已经尝试了这么长时间,我觉得我需要一些帮助。 基本上,我在Tkinter中有一个主注册窗口,可以按login或register。当我按下其中一个按钮时,登录和注册窗口就会出现,这就是它应该做的,所以这很好。但是,在主注册窗口中,每次单击其中一个按钮时,按钮都会重复。例如,当我按下“登录”按钮时,每次单击“登录”和“注册”按钮都会在主窗口中复制

from tkinter import *
import os
class main(object):
    def __init__(self):
        global screen
        self.screen = Tk()
        self.screen.geometry("500x300")
        self.screen.title("Login and Registration System")
        Label(text = "Welcome!", width = "300", height = "2", font = ("Calibri", 10)).pack()
        Label(text = "If you don't have a user, click on the register button to create an account.", width = "300", height = "2", font = ("Calibri", 10)).pack()
        Button(text = "Login", width = "30", height = "2", font = ("Calibri", 13), command = login).pack()
        Label(text = "").pack()
        Button(text = "Register", width = "30", height = "2", font = ("Calibri", 13), command = register).pack()
        Label(text = "").pack()
        #Button(text = "Guest", width = "30", height = "2", font = ("Calibri", 13), command = self.access).pack()
        #Label(text = "").pack()
    def access(self):
        self.screen3.destroy()
        global screen6
        self.screen6 = Toplevel(self.screen)
        self.screen6.title("Secret information")
        self.screen6.geometry("550x300")
        Label(self.screen6, text = "Welcome to the Mandelbrot Set Fractal visualisation tool").pack()
        Button(self.screen6, text = "exit", command = exit).pack()
    def run(self):
        self.screen.mainloop()
class destroy():
    '''
    def delete(self):
        self.screen2.destroy()
    def delete2(self):
        self.screen3.destroy()
    '''
    def delete3(self):
        self.screen4.destroy()
    def delete4(self):
        self.screen5.destroy()
    
    
class register(main):
    def __init__(self):
        super().__init__()
        global screen1
        self.screen1 = Toplevel()
        self.screen.withdraw()
        self.screen1.geometry("500x600")
        self.screen1.title("Register")

        global username
        global password
        global email
        global password2
        global usernameEntry
        global passwordEntry
        global emailEntry
        global confirmEntry

        self.username = StringVar()
        self.email = StringVar()
        self.c = StringVar()
        self.password = StringVar()
        self.password2 = StringVar()

        self.labelTitle = Label(self.screen1, text = "Create an account", font = ("Calibri", 20))
        self.labelTitle.place(x=50, y=3)

        self.labelTitle = Label(self.screen1, text = "Please, fill in the details below in order to register")
        self.labelTitle.place(x=90, y=50)
        self.labelTitle = Label(self.screen1, text = "* indicates a required field", fg = "red")
        self.labelTitle.place(x=140, y=73)

        self.labelUser = Label(self.screen1, text ="Username", width = "25")
        self.labelUser.place(x=30, y=130)
        self.labelRequired = Label(self.screen1, text="*", fg = "red")
        self.labelRequired.place(x=335, y=130)
        self.usernameEntry = Entry(self.screen1, textvariable = self.username)
        self.usernameEntry.place(x=170, y=130)

        self.labelEmail = Label(self.screen1, text ="Email address", width = "25")
        self.labelEmail.place(x=17, y=170)
        self.labelRequired2 = Label(self.screen1, text="*", fg = "red")
        self.labelRequired2.place(x=335, y=170)
        self.emailEntry = Entry(self.screen1, textvariable = self.email)
        self.emailEntry.place(x=170, y=170)

        self.labelPassword = Label(self.screen1, text ="Password", width = "25")
        self.labelPassword.place(x=31, y=210)
        self.labelRequired2 = Label(self.screen1, text="*", fg = "red")
        self.labelRequired2.place(x=335, y=210)
        self.passwordEntry = Entry(self.screen1, textvariable = self.password, show = '*')
        self.passwordEntry.place(x=170, y=210)

        self.labelConfirm = Label(self.screen1, text ="Confirm", width = "25")
        self.labelConfirm.place(x=35, y=250)
        self.labelRequried2 = Label(self.screen1, text="*", fg = "red")
        self.labelRequired2.place(x=335, y=250)
        self.confirmEntry = Entry(self.screen1, textvariable = self.password2, show = '*')
        self.confirmEntry.place(x=170, y=250)

        Button(self.screen1, text="Register", width=20, bg="brown", fg="white", command = self.registrationComplete) .place(x=160, y=490)

    def registrationComplete(self):

        global usernameInfo
        global passwordInfo
        global password2Info
        global emailinfo

        
        self.usernameInfo = self.username.get()
        self.passwordInfo = self.password.get()
        self.password2Info = self.password2.get()
        self.emailInfo = self.email.get()
        while True:
            if self.usernameInfo != '' and self.passwordInfo != '' and self.password2Info != '' and self.emailInfo != '':
                if '@' in self.emailInfo: 
                    if self.password2Info == self.passwordInfo:
                        break
                    else:
                        self.labelTitle = Label(self.screen1, text="                      Passwords don't match                ", fg="red",font=("calibri", 11))
                        self.labelTitle.place(x=40, y=93)
                        return
                else:
                    self.labelTitle = Label(self.screen1, text="Please enter a valid email address", fg="red", font=("calibri", 11))
                    self.labelTitle.place(x=70, y=93)
                    return
            else:
                self.labelTitle = Label(self.screen1, text="           Please fill the required fields", fg="red", font=("calibri", 11))
                self.labelTitle.place(x=70, y=93)
                return

        self.file.close()
        self.file=open(self.usernameInfo, "w")
        self.file.write(self.usernameInfo+"\n")
        self.file.write(self.passwordInfo+"\n")
        self.file.write(self.emailInfo+"\n")

        self.usernameEntry.delete(0, END)
        self.passwordEntry.delete(0, END)
        self.emailEntry.delete(0, END)
        self.confirmEntry.delete(0, END)

        self.labelTitle = Label(self.screen1, text="Registration success, you can now log in with your user", fg="green", font=("calibri", 11))
        self.labelTitle.place(x=50, y=93)

class login(main):
    def __init__(self):
        super().__init__()
        global screen2
        self.screen2 = Toplevel(self.screen)
        self.screen2.title("Login")
        self.screen.withdraw()
        self.screen2.geometry("500x300")
        Label(self.screen2, text="Please enter details below to login").pack()
        Label(self.screen2, text="").pack()

        global usernameVerify
        global passwordVerify

        self.usernameVerify = StringVar()
        self.passwordVerify = StringVar()

        global usernameEntry1
        global passwordEntry1

        Label(self.screen2, text="Username * ").pack()
        self.usernameEntry1 = Entry(self.screen2, textvariable = self.usernameVerify)
        self.usernameEntry1.pack()
        Label(self.screen2, text="").pack()
        Label(self.screen2, text="Password * ").pack()
        self.passwordEntry1 = Entry(self.screen2, textvariable = self.passwordVerify, show = '*')
        self.passwordEntry1.pack()
        Label(self.screen2, text="").pack()
        Button(self.screen2, text = "Login", width = 10, height = 1, command = self.loginVerify).pack()
    def loginVerify(self):
        #super().__init__()
        #global fileList
        #global file1
        self.username1 = self.usernameVerify.get()
        self.password1 = self.passwordVerify.get()
        self.usernameEntry1.delete(0, END)
        self.passwordEntry1.delete(0, END)

        self.fileList = os.listdir()
        while True:
            if self.username1 in self.fileList:
                self.file1 = open(self.username1, "r")
                self.verify = self.file1.read().splitlines()
                if self.password1 in self.verify:
                    self.loginSuccess()
                    break
                else:
                    label_title = Label(self.screen2, text="Invalid username or password", fg="red", font=("calibri", 11))
                    label_title.place(x=135, y=19)
                    return
            else:
                label_title = Label(self.screen2, text="Invalid username or password", fg="red", font=("calibri", 11))
                label_title.place(x=135, y=19)
                return
        
    def loginSuccess(self):
        super().__init__()
        global screen3
        self.screen3 = Toplevel(self.screen)
        self.screen.withdraw()
        self.screen3.title("Logged in")
        self.screen3.geometry("500x300")
        Label(self.screen3, text = "Logged in successfully, \n click OK to access the secret information").pack()
        Button(self.screen3, text = "OK", command = self.access(self)).pack()

    def passwordNotRecognised(self):
        global screen4
        self.screen4 = Toplevel(self.screen)
        self.screen4.title("Error")
        self.screen4.geometry("150x100")
        Label(self.screen4, text = "Password could not be linked to any username").pack()
        Button(self.screen4, text = "OK", command = delete3).pack()

    def userNotFound(self):
        global screen5
        self.screen5 = Toplevel(self.screen)
        self.screen5.title("Error")
        self.screen5.geometry("150x100")
        Label(self.screen5, text = "We could not find given username from our system").pack()
        Button(self.screen5, text = "OK", command = self.delete4).pack()




mainCall = main()
mainCall.run()








    class main(object):
        def __init__(self):
            global screen
            self.screen = Tk()
            self.screen.geometry("500x300")
            self.screen.title("Login and Registration System")
            Label(text = "Welcome!", width = "300", height = "2", font = ("Calibri", 10)).pack()
            Label(text = "If you don't have a user, click on the register button to create an account.", width = "300", height = "2", font = ("Calibri", 10)).pack()
            Button(text = "Login", width = "30", height = "2", font = ("Calibri", 13), command = login).pack()
            Label(text = "").pack()
            Button(text = "Register", width = "30", height = "2", font = ("Calibri", 13), command = register).pack()
            Label(text = "").pack()
            #Button(text = "Guest", width = "30", height = "2", font = ("Calibri", 13), command = self.access).pack()
            #Label(text = "").pack()
        def access(self):
            self.screen3.destroy()
            global screen6
            self.screen6 = Toplevel(self.screen)
            self.screen6.title("Secret information")
            self.screen6.geometry("550x300")
            Label(self.screen6, text = "Welcome to the Mandelbrot Set Fractal visualisation tool").pack()
            Button(self.screen6, text = "exit", command = exit).pack()
        def run(self):
            self.screen.mainloop()

下面是修复此问题的代码,正如在评论中所说,您再次在所有小部件上调用
.pack()

从tkinter导入*
导入操作系统
类主(对象):
定义初始化(自):
全球屏幕
self.screen=Tk()
def_________________(自):
自身屏幕几何(“500x300”)
self.screen.title(“登录和注册系统”)
标签(text=“Welcome!”,width=“300”,height=“2”,font=(“Calibri”,10)).pack()
Label(text=“如果您没有用户,请单击注册按钮创建帐户。”,width=“300”,height=“2”,font=(“Calibri”,10)).pack()
按钮(text=“Login”,width=“30”,height=“2”,font=(“Calibri”,13),command=Login).pack()
标签(text=”“).pack()
按钮(text=“Register”,width=“30”,height=“2”,font=(“Calibri”,13),command=Register).pack()
标签(text=”“).pack()
#按钮(text=“Guest”,width=“30”,height=“2”,font=(“Calibri”,13),command=self.access).pack()
#标签(text=”“).pack()
def访问(自):
self.screen3.destroy()
全球屏幕6
self.screen 6=顶层(self.screen)
self.screen6.标题(“秘密信息”)
自身屏幕6.几何(“550x300”)
Label(self.screen6,text=“欢迎使用Mandelbrot集分形可视化工具”).pack()
按钮(self.screen6,text=“exit”,command=exit).pack()
def运行(自):
self.screen.mainloop()
类销毁():
'''
def删除(自我):
self.screen2.destroy()
def delete2(自身):
self.screen3.destroy()
'''
def delete3(自身):
self.screen4.destroy()
def delete4(自身):
self.screen5.destroy()
班级登记册(主要):
定义初始化(自):
super()。\uuuu init\uuuuu()
全球屏幕1
self.screen1=顶级()
self.screen.draw()
自身屏幕1.几何(“500x600”)
self.screen1.标题(“注册”)
全局用户名
全局密码
全球电子邮件
全局密码2
全局用户名条目
全局密码条目
全局电子邮件条目
全球确认
self.username=StringVar()
self.email=StringVar()
self.c=StringVar()
self.password=StringVar()
self.password2=StringVar()
self.labelTitle=Label(self.screen1,text=“创建帐户”,font=(“Calibri”,20))
self.labelTitle.place(x=50,y=3)
self.labelTitle=Label(self.screen1,text=“请填写以下详细信息以便注册”)
self.labelTitle.place(x=90,y=50)
self.labelTitle=Label(self.screen1,text=“*表示必填字段”,fg=“红色”)
自标签位置(x=140,y=73)
self.labelUser=标签(self.screen1,text=“Username”,width=“25”)
自标号位置(x=30,y=130)
self.labelRequired=标签(self.screen1,text=“*”,fg=“红色”)
需要自标签位置(x=335,y=130)
self.usernameEntry=Entry(self.screen1,textvariable=self.username)
self.usernameEntry.place(x=170,y=130)
self.labelEmail=Label(self.screen1,text=“电子邮件地址”,width=“25”)
self.labelEmail.place(x=17,y=170)
self.labelRequired2=标签(self.screen1,text=“*”,fg=“红色”)
需要自标签2.位置(x=335,y=170)
self.emailEntry=Entry(self.screen1,textvariable=self.email)
self.emailEntry.place(x=170,y=170)
self.labelPassword=标签(self.screen1,text=“Password”,width=“25”)
self.labelPassword.place(x=31,y=210)
self.labelRequired2=标签(self.screen1,text=“*”,fg=“红色”)
需要自标签2.位置(x=335,y=210)
self.passwordEntry=Entry(self.screen1,textvariable=self.password,show='*'))
self.passwordEntry.place(x=170,y=210)
self.labelConfirm=标签(self.screen1,text=“Confirm”,width=“25”)
自我标签确认位置(x=35,y=250)
self.labelRequried2=标签(self.screen1,text=“*”,fg=“红色”)
需要自标签2.位置(x=335,y=250)
self.confirmEntry=Entry(self.screen1,textvariable=self.password2,show='*'))
自我确认地点(x=170,y=250)
按钮(self.screen1,text=“Register”,width=20,bg=“brown”,fg=“white”,command=self.registationcomplete)。放置(x=160,y=490)
def注册完成(自我):
全局用户名信息
全局密码信息
全局密码2信息
全球电子邮件信息
self.usernameInfo=self.username.get()
self.passwordInfo=self.password.get()
self.password2Info=self.password2.get()
self.emailInfo=self.email.get()
尽管如此:
如果self.usernameInfo!=''和self.passwordInfo!=''和self.password2Info!=''和self.emailInfo!='':
如果self.emailInfo中有“@”:
如果self.password2Info==self.passwordInfo:
打破
其他:
self.labelTitle=Label(self.screen1,text=“密码不匹配”,fg=“红色”,font=(“calibri”,11))
self.labelTitle.place(x=40,y=93)
返回
其他:
self.labelTitle=La