Tkinter: как передать аргументы от входа в функцию (и сбой при выходе)

Я работаю над страницей входа в Tkinter для развлечения, но я не могу создать функцию, которая проверяет записи и сравнивает их с конкретным вводом. Кроме того, код добавляет окно сообщений и вызывает функцию каждый раз, когда я выхожу из окна.

Мой код:

from tkinter import *
from tkinter import messagebox


root = Tk()
root.title("Login")



def makeUname(d):
    if messagebox.askyesno("Submit?", "Is this correct?"):
        global password
        username = uname.get()
        uname.grid_forget()
        return password

def makePasswd(d):
    if messagebox.askyesno("Submit?", "Is this correct?"):
        global username
        password = uname.get()
        passwd.grid_forget()
        return username

def button():
    makeUname("")
    makePasswd("")
    quitbutt.grid_forget()


uname = Entry(root)
uname.grid(row=1, column=1)

passwd = Entry(root, show = "*")
passwd.grid(row=2, column=1)

quitbutt = Button(root, text = "Login", command=button)
quitbutt.grid(row=3, column=1,  columnspan=2, sticky='nesw')


root.mainloop()

makeUname("")
makePasswd("")

if (username == "username" and password == "password"):
    messagebox.showwarning("Warning", "Sorry, this isn't programmed yet.")
else:
    messagebox.showwarning("Nope", "Nope. Nice try.")

Может ли кто-нибудь помочь мне с моим кодом? Должен ли я использовать другую настройку или метод?

весь код после mainloop() выполняется после закрытия окна - и у вас есть messagebox.showwarning() после mainloop, поэтому вы видите messagebox после закрытия окна.

furas 09.04.2019 01:10
uname.get() в ваших функциях дает вам текст из Entry — вам нужно только использовать print(uname.get()), чтобы увидеть его.
furas 09.04.2019 01:12

в функции вы используете global username, но присваиваете значение password - это не имеет смысла.

furas 09.04.2019 01:14
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
131
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Было много проблем, поэтому я изменил все, чтобы сделать его проще.

Я добавил комментарии в код, чтобы объяснить некоторые элементы.

from tkinter import *
from tkinter import messagebox

# --- functions ---

def button():
    # use global variable (instead of local variables) 
    # to keep username, password outside function and keep after closing window
    global username
    global password

    username = uname.get()
    password = passwd.get()
    #print('button:', username, password)

    if username == "username" and password == "password":
        messagebox.showwarning("Warning", "Sorry, this isn't programmed yet.")
        root.destroy() # close window
    else:
        messagebox.showwarning("Nope", "Nope. Nice try.")
        # window still open

# --- main ---

# default values at start 
# Someone can exit window without using Button
# and it would not create this variables in button()
username = ""
password = ""

root = Tk()
root.title("Login")

uname = Entry(root)
uname.grid(row=1, column=1)

passwd = Entry(root, show = "*")
passwd.grid(row=2, column=1)

quitbutt = Button(root, text = "Login", command=button)
quitbutt.grid(row=3, column=1, columnspan=2, sticky='nesw')

# start program (start engine, display window, (re)draw widgets, handle events, get events from system (keyboard, mouse), send events to widgets)
root.mainloop()

# after closing window this variables still have values from window
print("after mainloop:", username, password)

Извините, что было так много проблем - я полный дилетант в этом, и я очень благодарен за это. Теперь я могу сделать то, что собирался сделать после входа в систему.

Zachary Berkowitz 09.04.2019 02:30

Другие вопросы по теме

Похожие вопросы

Преобразование гистограммы в кривую в Python
Умножение определенных ячеек, перечисленных по индексу строки в столбце фрейма данных, на константу
Как создать набор виджетов tkinter (для цикла) и обращаться к каждому из них по отдельности?
Как распаковать строку, полученную с сервера, с помощью gzip
Как правильно идентифицировать значения с плавающей запятой [0, 1], содержащие точку, в типе объекта DataFrame?
Разложение LUP (PLU) не удалось со случайной матрицей
Получение ошибки «pytesseract not in your path» в том же коде, который раньше работал нормально
Пытаюсь получить расстояние, используя долготу и широту, но продолжаю работать с ошибкой: объект «Серия» не имеет атрибута «радианы»
Найдите процент от общего количества категорий, отсортируйте от самой высокой до самой низкой, сохраните имена первых 80% и переименуйте все остальные в «другие»
Есть ли способ получить содержимое HTTP Live Streaming (HLS) с помощью Firefox/Chrome?