ich versuche grade ein simples login mit tkinter zu realisieren. das ganze ist ein frames aufgelteilt. es gibt drei davon:
1) frame_login:
hier ist das login-formular
2) frame_loader:
nach erfolgreichem login müssen noch weitere daten abgefragt werden über eine REST-API, den fortschritt würde ich gerne in diesem frame anzeigen lassen
3) frame_content:
ist alles fertig geladen, wird dieses frame erzeugt
alles funktioniert soweit.. nur bekomme ich das frame_loader nicht zu sehen.. nachdem ich den loginversuch starte kommt direkt das frame_content(?) +vielleicht kann mir jemand sagen was ich falsch mache?
Code: Alles auswählen
from tkinter import *
from tkinter import ttk
from tkinter import font as tkfont
import requests
from requests.exceptions import HTTPError
import pymysql
import pprint
import time
import asyncio
root = Tk()
root.resizable(False, False)
root.title("MyApp")
root.geometry('600x300')
s = ttk.Style()
# - Vars
canvas_width = 600
canvas_height = 100
API_host = "http://examle.com/api/"
# - MySQL
db = pymysql.connect("11.11.11.12","username","password","dbname")
mySqlCursor = db.cursor()
# ---------------------------------------- FRAME login ----------------------------------------
def create_login():
root.geometry('600x300')
# create main-frame
frame_login_content = ttk.Frame(root, padding=(0,0,0,0))
# create login-form into main-frame
login_form = ttk.Frame(frame_login_content, padding=(0,1,1,1))
labelframeLogin = ttk.LabelFrame(login_form, text = "Please login: ")
labelframeLogin.pack(expand="yes", padx=15, pady=15)
labelUser = ttk.Label(labelframeLogin, text='Usr:')
entryUser = ttk.Entry(labelframeLogin)
labelPwd = ttk.Label(labelframeLogin, text='Pwd:')
entryPwd = ttk.Entry(labelframeLogin)
button1 = ttk.Button(login_form, text = "Login", width = 20, command = lambda: doLogin(entryUser.get(), entryPwd.get()))
button1.pack(padx=10, pady=10)
# layut - grid
frame_login_content.grid(column=0, row=0, sticky=(N, S, E, W))
login_canvas.grid(column=0, row=0, sticky=(E, W))
login_form.grid(column=0, row=1, sticky=(E, W), padx=10, pady=10)
labelUser.grid(column=1, row=2, sticky=(E, W), padx=10, pady=3)
entryUser.grid(column=2, row=2, sticky=(E, W), padx=10, pady=3)
labelPwd.grid(column=1, row=3, sticky=(E, W), padx=10, pady=3)
entryPwd.grid(column=2, row=3, sticky=(E, W), padx=10, pady=3)
# weight elements
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
frame_login_content.columnconfigure(0, weight=3)
frame_login_content.columnconfigure(1, weight=3)
frame_login_content.columnconfigure(2, weight=3)
frame_login_content.columnconfigure(3, weight=1)
frame_login_content.columnconfigure(4, weight=1)
frame_login_content.rowconfigure(1, weight=1)
return frame_login_content
# ---------------------------------------- FRAME loader ----------------------------------------
def create_loader(msg):
global actualFrame
actualFrame2 = actualFrame
actualFrame2.destroy()
# create main-frame
frame_loader_content = ttk.Frame(root, padding=(0,0,0,0))
actualFrame = frame_loader_content
login_title = ttk.Label(frame_loader_content, text = "Bitte warten", anchor="center")
login_msg = ttk.Label(frame_loader_content, text = msg, anchor="center", foreground = "#666666")
frame_loader_content.grid(column=0, row=0, sticky=(N, S, E, W), padx=10, pady=10)
login_title.grid(column=0, row=0, columnspan=5, sticky=(E, W), padx=10, pady=3)
login_msg.grid(column=0, row=1, columnspan=5, sticky=(E, W), padx=10, pady=3)
root.geometry('600x80')
# weight elements
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
frame_loader_content.columnconfigure(0, weight=3)
return frame_loader_content
# ---------------------------------------- FRAME content ----------------------------------------
def create_content():
create_loader("Requestion API")
# - request API
p = makeRestCall(API_host, {})
# - check if request worked
try:
request Check = len(p)
except:
create_loader("ERROR - request-JSON is currupt")
else:
create_loader("request ok")
contentFrame = buildContentFrame(p)
return contentFrame
# ---------------------------------------- FUNCTIONS ----------------------------------------
def doLogin(u,p):
create_loader('Logging in')
# - Perform login and check result
# .....
for x in myresult:
if x["USERID"]:
logInCheck = 1
if logInCheck == 1:
create_loader("Login successfull")
create_content()
else:
create_login()
# - call first frame
actualFrame = create_login()
root.mainloop()