我是使用 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
太感謝了。
uj5u.com熱心網友回復:
當您呼叫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 的要求 - :

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/434649.html
標籤:Python 班级 tkinter tkinter 按钮
上一篇:類方法重新定義“自我”論證問題
