Python 如何 link 函数 if 语句到 Tkinter 标签?

Python how to link function if statements to Tkinter Label?

这是代码:

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()

这将提示我 window 以及用户名和密码。

我如何 link 从显示的 window 到 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")

命令提示符将是输入密码和用户名的主屏幕,但我需要在 window.

上获取它

这是一个小项目,如果有人对此有任何安全方面的意见,我并不关心,但欢迎提出建议! :)

第一:不要做

  usr = Entry().pack() 

因为它将 None 分配给 usr 因为 pack() 总是 returns None 然后你就无法访问 Entry获取用户名及其密码。您必须分两步完成

 usr = Entry()
 usr.pack()

对于标签和按钮,您甚至可以跳过变量,因为您不需要它们。


其次:您可以使用 command=function_name 访问按钮的功能。它必须是不带 () 的名称(所谓的 "callback")。

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

当你点击按钮时 mainloop 将 运行 ask_user()

ask_user 中,您可以使用 .get()

Entry 中获取值
    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()