Ich bin in Schwierigkeiten. Ich habe zwei Klassen geschrieben, die erste ist die Haupt-GUI für die Software und die zweite ist das Login. Jetzt muss ich im Anmeldefenster eine kleine Validierungsfunktion schreiben. Ich habe es geschrieben, aber ich muss nach der Validierung dieser Funktion die Haupt-GUI-Klasse aufrufen und von erben Tk
. Ich weiß, dass mein Code sehr schlecht ist, aber ich brauche bitte Hilfe.
class main_gui(Frame):
def __init__(self,master, self.username, self.password):
self.path = os.getcwd()
self.master = master
self.username = StringVar()
self.password = StringVar()
master.title("main menu")
master.geometry("800x600")
master.config(background="white")
master.resizable(width="false", height="false")
master.iconbitmap(self.path + r"/img/icon.ico")
self.mmenu = Menu(master)
self.menubar = Menu(self.mmenu, tearoff=0)
self.menubar.add_command(label="about", command=aboutme)
self.menubar.add_command(label="Exit!", command=master.destroy)
self.mmenu.add_cascade(label="menu", menu=self.menubar)
master.config(menu=self.mmenu)
class login(main_gui):
def __init__(self):
self.master.title("login")
self.master.geometry("350x250")
self.master.config(background="white")
self.master.resizable(width="false", height="false")
self.master.iconbitmap(self.path + r"/img/icon.ico")
self.user_label = Label(master, text="user name")
self.user_label.pack()
self.user_value = Entry(master, textvariable=self.username)
self.user_value.pack()
self.password_label = Label(master, text="password")
self.password_label.pack()
self.password_value = Entry(master, textvariable=self.password)
self.password_value.pack()
self.login = Button(master, text="login" )
self.login.pack()
def validation(self):
if self.username.get() == "admin" :
main_gui()
root = Tk()
hm = main_gui(root)
root.mainloop()
Antworten:
0 für die Antwort № 1Die Initialisierungsmethode Ihrer main_gui - Klasse ist nicht ganz richtig. Sie müssen sie folgendermaßen ändern.
def __init__(self, master, username, password):
self.path = os.getcwd()
self.master = master
self.username = username
self.password = password
master.title("main menu")
master.geometry("800x600")
master.config(background="white")
master.resizable(width="false", height="false")
master.iconbitmap(self.path + r"/img/icon.ico")
self.mmenu = Menu(master)
self.menubar = Menu(self.mmenu ,tearoff=0)
self.menubar.add_command(label="about",command=aboutme)
self.menubar.add_command(label="Exit!", command=master.destroy)
self.mmenu.add_cascade(label="menu", menu=self.menubar)
master.config(menu=self.mmenu)
Sehen Sie, welche Änderungen ich vorgenommen habe? self
wird als erstes Argument an die Funktion übergeben, und dann master
und username
werden ohne das übergeben self.
. Auf diese Weise können Sie deren Werten zuweisen self.master
und self.username
im Hauptteil des Codes.
Hoffentlich macht das den Trick für Sie.
0 für die Antwort № 2
Ich denke deine Idee ist falsch. Sie müssen nicht von erben main_gui
. Das ergibt für mich keinen Sinn.
Es sieht so aus, als hätten Sie zwei getrennte Fenster, die Sie auf zwei Arten verwenden können.
Zuerst:
- Login als Hauptfenster erstellen,
- Login / Passwort erhalten,
- zerstöre Login (damit du kein Hauptfenster hast),
- Erstelle MainGUI als Hauptfenster (benutze Login / Passwort als Parameter)
- benutze MainGUI
Zweite:
- erstelle MainGUI als Hauptfenster (du kannst es verstecken oder nicht),
- erstelle Login als Kind / Unterfenster / Dialog (nicht als Hauptfenster) mit
Toplevel
, - Login / Passwort holen (und MainGUI eingeben, welches Login`s Elternteil ist)
- zerstöre Login (so hast du immer noch MainGUI als Hauptfenster),
- benutze MainGUI (nachdem du es ausgeblendet hast)
Beide Situationen müssen nicht geerbt werden
Die erste Version könnte so aussehen:
from tkinter import *
import sys
import os
class MainGui():
def __init__(self, username, password):
self.master = Tk()
self.path = os.getcwd()
self.path = os.path.realpath(sys.argv[0])
self.username = StringVar(value=username)
self.password = StringVar(value=password)
self.master.title("main menu")
self.master.geometry("800x600")
self.master.config(background="white")
self.master.resizable(width="false", height="false")
#master.iconbitmap(self.path + r"/img/icon.ico")
self.mmenu = Menu(self.master)
self.menubar = Menu(self.mmenu ,tearoff=0)
self.menubar.add_command(label="about",command=self.aboutme)
self.menubar.add_command(label="Exit!", command=self.master.destroy)
self.mmenu.add_cascade(label="menu", menu=self.menubar)
self.master.config(menu=self.mmenu)
self.master.mainloop()
def aboutme(self):
pass
class Login():
def __init__(self):
self.master = Tk()
self.path = os.path.realpath(sys.argv[0])
self.master.title("login")
self.master.geometry("350x250")
self.master.config(background="white")
self.master.resizable(width="false", height="false")
#self.master.iconbitmap(self.path + r"/img/icon.ico")
self.username = StringVar()
self.password = StringVar()
self.user_label = Label(self.master, text="user name")
self.user_label.pack()
self.user_value = Entry(self.master, textvariable=self.username)
self.user_value.pack()
self.password_label = Label(self.master, text="password")
self.password_label.pack()
self.password_value = Entry(self.master, textvariable=self.password)
self.password_value.pack()
self.login = Button(self.master, text="login", command=self.validation)
self.login.pack()
self.message = Label(self.master)
self.message.pack()
self.message.mainloop()
def validation(self):
if self.username.get() == "admin" :
self.master.destroy()
MainGui(self.username.get(), self.password)
else:
self.message["text"] = "Wrong !!!"
# --- start ---
Login()