/ / Klasse aufrufen und von einer anderen Klasse erben - Python 3 - Python, Python-3.x, Klasse, Tkinter

Klasse aufrufen und von einer anderen Klasse erben - Python 3 - Python, Python-3.x, Klasse, Tkinter

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 № 1

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