"Я не определен" Tkinter (Форма входа) - PullRequest
0 голосов
/ 10 февраля 2020

Привет, я работаю над графическим интерфейсом Tkinter и пытаюсь создать форму входа с паролем и именем пользователя. Я пытаюсь связать / связать переменные пользователя и passw с двумя элементами tk.Entry () (имя пользователя и пароль). Я хочу связать / соединить их, чтобы я мог создать функцию, в которой программа запрашивает функцию, если пароль и имя пользователя правильные и разрешено ли вам входить в систему (если username == "" и password == "": login ())

Вот мой код:

import tkinter as tk
from tkinter import *

root = tk.Tk()
root.title("Login")
root.resizable(False, False)

global username
username = StringVar
global password
password = StringVar
user = username.get()
passw = password.get()

tk.Label(root, text="Please enter details below", height=1,width=20).pack()
tk.Label(root, text="Username *", height=1,width=20).pack()
tk.Entry(root, textvariable=username).pack()
tk.Label(root, text="Password *", height=1,width=20).pack()
tk.Entry(root, textvariable=password).pack()
tk.Button(root, text="Login", height=2, width=20, command=login).pack()
root.mainloop()

Я получаю сообщение об ошибке:

Traceback (последний вызов был последним): Файл "C: \ Users \ Martin \ AppData \ Local \ Programs \ Python \ Python38-32 \ lib \ tkinter__init __. Py ", строка 1883,> in call return self.fun c (* args) TypeError: login () отсутствует 1 обязательный позиционный аргумент: 'self'

1 Ответ

1 голос
/ 10 февраля 2020

Вам не хватает нескольких ключевых элементов.

  1. StringVar отсутствует (). Вы должны иметь круглые скобки, чтобы они работали как положено.

  2. Ваша команда кнопки пытается активировать то, что не существует. Это также делает очень странным, что вы получаете ошибку, которую вы опубликовали. Вы должны получить name 'login' is not defined.

  3. Не нужно делать from tkinter import * вы уже используете import tkinter as tk.

  4. username.get() и password.get() всегда будет пустой строкой, потому что она вызывается только один раз при запуске программы. Они должны быть в функции, которую нужно обновить.

  5. Использование global ничего не делает для вас. Термин global используется для обозначения локального пространства имен (IE внутри функции), что имя переменной, о которой идет речь, должно быть определено в глобальном пространстве имен и доступно в глобальном пространстве имен. Прямо сейчас вы говорите глобальному пространству имен, что он может найти что-то в глобальном пространстве имен. Это бессмысленно.

Код очистки:

import tkinter as tk


root = tk.Tk()
root.title("Login")
root.resizable(False, False)
username = tk.StringVar()
password = tk.StringVar()


def login():
    user = username.get()
    passw = password.get()
    if user == 'me' and passw == 'pass':
        print('Login success!')
    else:
        print('Login failed!')


tk.Label(root, text="Please enter details below", height=1, width=20).pack()
tk.Label(root, text="Username *", height=1, width=20).pack()
tk.Entry(root, textvariable=username).pack()
tk.Label(root, text="Password *", height=1, width=20).pack()
tk.Entry(root, textvariable=password).pack()
tk.Button(root, text="Login", height=2, width=20, command=login).pack()
root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...