我最近发现了Python ,特别是Tkinter库。我想为我的申请制作授权和注册窗口。一开始我想只在代码中写下登录名和访问密码,但后来我决定做一个注册窗口会更好。应用程序注册用户,记住他的登录名和密码,然后启动程序本身(在下面的代码中进入计算器)。
当应用程序启动时,会打开一个授权窗口,提示用户输入他们的用户名和密码。还有注册的可能。程序启动,但是当你点击“注册”按钮时,出现错误:
Traceback (most recent call last):
File "C:\Users\apaha\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1892, in __call__
return self.func(*args)
TypeError: open_window() missing 1 required positional argument: 'self'
我无法以任何方式修复它,我向有经验的程序员寻求帮助。谢谢!
#импорт всех нужных библиотек
from tkinter import*
from tkinter import messagebox
import tkinter as tk
from tkinter.ttk import Progressbar
from tkinter import Toplevel
from PIL import Image, ImageTk
from PIL import Image as PILImage
import os
#настройки главного окна
window=Tk()
window.title('Авторизация')
window.geometry('380x300')
window["bg"]="grey25"
window.resizable(width=True, height=True)
#настройки всплывающего окна
class Reg(tk.Toplevel):
def __init__(self, parent):
super().__init__(parent)
window.label = tk.Label(self, text="Пожалуйста, введите данные для регистрации")
window.button = tk.Button(self, text="Закрыть", command=self.destroy)
window.label.pack(padx=20, pady=20)
window.button.pack(pady=5, ipadx=2, ipady=2)
if __name__ == "__main__":
app = App()
app.mainloop()
class App(tk.Tk):
def __init__(self):
super().__init__()
def open_window(self):
Reg = Reg(self)
Reg.grab_set()
#получение логина и пароля с окна ввода
def get_E_log():
log=E_log.get()
def get_E_pas():
pas=E_pas.get()
#проверка логина и пароля на правильность
def click1():
if E_log.get()=='admin' and E_pas.get()=='123':
messagebox.showinfo("Сообщение", "Доступ получен")
os.system("start calc")
else:
messagebox.showinfo("Сообщение", "Отказано в доступе\nТы кто, дядя?")
#св-ва переменных
log=StringVar()
pas=StringVar()
#Логин
L_log=Label(window, text='Введите логин: ', font=("consolas", 15), bg="grey25", fg="white", padx=1, pady=1)
L_log.grid(column=0, row=0)
E_log=Entry(window, width=16, justify=CENTER, textvariable=log)
E_log.grid(column=1, row=0)
#Пароль
L_pas=Label(window, text=' Введите пароль: ', font=("consolas", 15), bg="grey25", fg="white", padx=1, pady=1)
L_pas.grid(column=0, row=1)
E_pas=Entry(window, width=16, justify=CENTER, textvariable=pas)
E_pas.grid(column=1, row=1)
#Кнопка подтверждения
B_accept=Button(window, text="Подтвердить", font=("consolas", 10), bg="black", fg="white", padx=1, pady=1, command=click1)
B_accept.grid(column=2, row=2)
#Кнопка регистрации
B_reg=Button(window, text="Регистрация", font=("consolas", 10), bg="black", fg="white", padx=1, pady=1, command=open_window)
B_reg.grid(column=2, row=3)
#Ожидание взаимодействия
window.mainloop()

你
open_window没有方法,只有一个函数,所以没有self。这里有几种解决方案:因此,我们做第一个选项: