W takiej formie jak zapisałeś nie da nic się wpisać w if-a bo kod w ten sposób umieszczony wykona się po inicjalizacji okna, a tu mamy do czynienia z poczekaniem na zdarzenie (event) np. wpisania nazwy użytkownika lub kliknięcia w przycisk usrConfirm w takim wypadku ten kod
password = Toplevel()
sleep(2)
psw_enter = Label(password, text="czesc").pack()
powinien być przeniesiony do
def usr_enter():
usr = Label(root, text="Witamy w QOS, " + usrEntry.get())
usr.pack()
password = Toplevel()
sleep(2)
psw_enter = Label(password, text="czesc").pack()
i wtedy można np. zapisać tak
def usr_enter():
usr = Label(root, text="Witamy w QOS, " + usrEntry.get())
usr.pack()
if len(usrEntry.get()) > 2: #więcej niż 2 znaki
password = Toplevel()
sleep(2)
psw_enter = Label(password, text="czesc").pack()
Może przenieś całe logowanie do okienka (popup - dialog modal). W przykładzie zakładam, że są utworzone 2 konta (symulacja: lista users)
from datetime import datetime
from time import sleep
from tkinter import *
from PIL import ImageTk, Image
from tkinter import filedialog
def log_time():
return f"[{datetime.now():%x %X}]"
root = Tk()
root.title("QOS")
root.iconbitmap("C:\pythonfiles\icofile.ico")
root.geometry("640x360")
users = ["stachu2822", "VBService"]
def list_of_users():
frame = Frame(root)
frame.pack()
button_row = 1
for user in users:
userButton = Button(
frame,
text=user,
width=20, padx=5, pady=5,
highlightcolor="green",
activebackground="#959595",
font="Consolas 10",
command=lambda user=user: popup_user_login(user)
)
button_row += 1
userButton.grid(column=0, row=button_row)
def popup_user_login(user):
def close_popup_user_login(): # naciśnięto przycisk x w okienku
print("User", user, "anulował logowanie", log_time())
# zamykanie okna popup
root.wm_attributes("-disabled", False)
popup.destroy()
root.deiconify()
def user_login(): # naciśnięto przycisk Login
print(" Login:", userLoginEntry.get())
print("Password:", userPasswordEntry.get())
# otwieranie okna popup
root.wm_attributes("-disabled", True)
popup = Toplevel(root)
popup.transient(root)
popup.protocol("WM_DELETE_WINDOW", close_popup_user_login)
popup.minsize(250, 120)
popup.maxsize(250, 120)
popup.title("Login")
popup.tkraise(root)
Label(popup, text="Podaj login:").pack()
userLoginEntry = Entry(popup, width=50)
userLoginEntry.insert(0, user)
userLoginEntry.pack()
Label(popup, text="Podaj hasło:").pack()
userPasswordEntry = Entry(popup, width=50)
userPasswordEntry.pack()
Button(popup, text="Login", font="Consolas 10",
width=20, padx=5, pady=5, command=user_login).pack(pady=10)
popup.mainloop()
if __name__ == "__main__":
list_of_users()
root.mainloop()