Python, как связать функцию if с Tkinter Label? - PullRequest
0 голосов
/ 19 сентября 2019

Это код:

from tkinter import *
import glob
import os
from PIL import Image, ImageTk, ImageGrab
import tkinter as tk
import pyautogui
import datetime
import sys
from tkinter import scrolledtext

root = tk.Tk()
root.title("SIGN OFF")
root.minsize(840, 800)
mainframe = tk.Frame(root)
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)
mainframe.pack(pady=100, padx=100)

username = Label(mainframe, text = "Username").pack()
usr = Entry(mainframe).pack()
password = Label(mainframe, text = "Password").pack()
pwd = Entry(mainframe).pack()
submit = Button(mainframe, text = "Log in").pack()


def askUser():
    username = input("Username: ")
    password = input("Password: ")

    if username == "Ed" and password == "true":
        app()
    if username == "buxton" and password == "logix":
        app()
    else:
        root.destroy()


root.mainloop()

Появится окно с именем пользователя и паролем.

Как связать ввод имени пользователя из отображаемого окна с функцией askUser() имени пользователя и наоборот с паролем?

Если я использую только этот кусок кода и запускаю его:

def askUser():
    username = input("Username: ")
    password = input("Password: ")

    if username == "Ed" and password == "true":
        app()
    if username == "buxton" and password == "logix":
        app()
    else:
        print("failed")

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

Это небольшой проект, если у кого-то есть какие-либо комментарии по поводу безопасности, я не очень обеспокоен, но открыт для предложений!:)

1 Ответ

0 голосов
/ 19 сентября 2019

Во-первых: не делайте

  usr = Entry().pack() 

, потому что он принимает None до usr, потому что pack() всегда возвращает None, и тогда у вас нет доступа к Entry дляполучить имя пользователя и его пароль.Вы должны сделать это в два шага

 usr = Entry()
 usr.pack()

Для ярлыков и кнопок вы можете даже пропустить переменные, потому что они вам не нужны.


Второе: вы можете получить доступ к функции для кнопкииспользуя command=function_name.Это должно быть имя без () (так называемое "callback").

tk.Button(mainframe, text="Log in", command=ask_user)

Когда вы нажимаете кнопку, тогда mainloop запускается ask_user()

А внутри ask_user вы можете получить значения из Entry, используя .get()

    username = usr.get()
    password = pwd.get()

Полный код:

import tkinter as tk

# --- functions ---

def ask_user():
    username = usr.get()
    password = pwd.get()

    if username == "Ed" and password == "true":
        app()
    if username == "buxton" and password == "logix":
        app()
    else:
        root.destroy()

# --- main ---

root = tk.Tk()

mainframe = tk.Frame(root)
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)
mainframe.pack(pady=100, padx=100)

tk.Label(mainframe, text="Username").pack()

usr = tk.Entry(mainframe)
usr.pack()

tk.Label(mainframe, text="Password").pack()

pwd = tk.Entry(mainframe)
pwd.pack()

tk.Button(mainframe, text="Log in", command=ask_user).pack()

root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...