RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1268823
Accepted
Whynot_46
Whynot_46
Asked:2022-04-11 21:54:59 +0000 UTC2022-04-11 21:54:59 +0000 UTC 2022-04-11 21:54:59 +0000 UTC

类型错误:open_window() 缺少 1 个必需的位置参数:'self'

  • 772

我最近发现了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()

授权窗口界面

python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    insolor
    2022-04-12T13:59:56Z2022-04-12T13:59:56Z

    你open_window没有方法,只有一个函数,所以没有self。这里有几种解决方案:

    1. 显式传递父窗口
    2. 将此函数设为某个类的方法,并从该类的对象调用。但是这里不清楚这是一个什么样的类——显然不是App,因为根据你程序的逻辑,它应该只有在按下按钮后才能创建。

    因此,我们做第一个选项:

    def open_window(parent):
        reg = Reg(parent)  # Не называем переменную так же как класс
        reg.grab_set()
    
    ...
    
    B_reg=Button(window, text="Регистрация", font=("consolas", 10), bg="black", fg="white", padx=1, pady=1,
                 command=lambda: open_window(window))
    
    • 1

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5