0

我是使用 Python 的图形用户界面的新手。在登录页面单击“注册”按钮后,我试图打开“注册”页面。然后,点击“返回登录”返回登录页面。但它没有用。

login.py

from tkinter import *
from tkinter import messagebox
from tkinter import ttk
from register import Register

class Login:
    def __init__(self):
        self.loginw = Tk()
        self.loginw.title("Login")
        self.loginw.geometry("500x500")
        
        self.signin = Button(self.loginw,width=20, text="Register", command=self.register)
        self.signin.place(relx=0.5, rely=0.5, anchor=CENTER)

    def register(self):
        self.loginw.quit()
        win = Toplevel()
        Register(win)

w=Login()
w.loginw.mainloop()

register.py

from tkinter import *
from tkinter import messagebox
from tkinter import ttk

class Register:
    def __init__(self):
        self.reg = Tk()
        self.reg.title("Register")
        self.reg.geometry("500x500")
        
        self.revert = Button(self.reg,width=20, text="Return to Login")
        self.revert.place(relx=0.5, rely=0.5, anchor=CENTER)

单击注册按钮后出现的错误

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\me\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
  File "c:\Users\me\Documents\Education\Testing code\login.py", line 18, in register
    Register(win)
TypeError: Register.__init__() takes 1 positional argument but 2 were given

太感谢了。

4

1 回答 1

0

当您调用Register类的构造函数来获取窗口时,您传递了Toplevel命名的实例,win但在__init__Register 类的方法中,您不接受构造函数的任何参数。

这可以通过在方法中接受另一个参数来解决__init__。进一步注意,不需要初始化self.reg,因为作为参数tkinter.Tk()Toplevel实例将在它的位置工作。

Register定义将更改为 -:

class Register:
    def __init__(self, win):
        self.reg = win # new.
        self.reg.title("Register")
        self.reg.geometry("500x500")
        
        self.revert = Button(self.reg,width=20, text="Return to Login")
        self.revert.place(relx=0.5, rely=0.5, anchor=CENTER)
        self.reg.mainloop() # new.

此外,现在必须为初始化的新窗口启动一个新的主循环,因此self.reg.mainloop()添加了该行。

随着建议的更改到位,输出似乎符合 OP 的要求 - :

在此处输入图像描述

于 2022-02-28T08:58:20.377 回答