Warum verhält sich alles in einer Klasse anders? (Tkinter)

Fragen zu Tkinter.
l30n100
User
Beiträge: 19
Registriert: Sonntag 18. Februar 2018, 14:15

Montag 5. März 2018, 20:48

Hi wuf,

ne, es wird keine Fehlermeldung ausgegeben. :K

Lg
Benutzeravatar
wuf
User
Beiträge: 1497
Registriert: Sonntag 8. Juni 2003, 09:50

Montag 5. März 2018, 21:01

OK l30n100

Zeigt das folgende Skript bei dir das Bild an?:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

try:
    #~~ For Python 2.x
    import Tkinter as tk
except ImportError:
    #~~ For Python 3.x
    import tkinter as tk
        
        
app_win = tk.Tk()

my_image = tk.PhotoImage(file="F:\\Python\\Projekte\\Fiete Pauker\\Fiete Pauker\\Startseite\\Startseite(klein).png")
head = tk.Label(app_win)
head.pack()
head["image"] = my_image

app_win.mainloop()
Gruss wuf :wink:
Take it easy Mates!
l30n100
User
Beiträge: 19
Registriert: Sonntag 18. Februar 2018, 14:15

Dienstag 6. März 2018, 14:07

Ja, in diesem Skript wird das Bild angezeigt.

Lg
Benutzeravatar
wuf
User
Beiträge: 1497
Registriert: Sonntag 8. Juni 2003, 09:50

Dienstag 6. März 2018, 14:53

OK l30n100

Schritt-02:
Wird bei diesem Skript das Bild auch angezeigt? Achtung das Bild wird nicht im grossen Hauptfenster sondern im zweiten kleinen Zusatzfenster (Toplevel) sichtbar!:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

try:
    #~~ For Python 2.x
    import Tkinter as tk
except ImportError:
    #~~ For Python 3.x
    import tkinter as tk


class Menu:
    def __init__(self):
        self.menu = tk.Toplevel()

        #Startbild
        self.my_image = tk.PhotoImage(file="F:\\Python\\Projekte\\Fiete Pauker\\Fiete Pauker\\Startseite\\Startseite(klein).png")
        self.head = tk.Label(self.menu)
        self.head.pack()
        self.head["image"] = self.my_image
        
        
app_win = tk.Tk()

menu = Menu()

app_win.mainloop()
Gruss wuf :wink:
Take it easy Mates!
l30n100
User
Beiträge: 19
Registriert: Sonntag 18. Februar 2018, 14:15

Dienstag 6. März 2018, 16:56

Ja, hier wird das Bild wieder sichtbar. Diesmal aber wie du beschrieben hast im Toplevel.

Lg
Benutzeravatar
wuf
User
Beiträge: 1497
Registriert: Sonntag 8. Juni 2003, 09:50

Dienstag 6. März 2018, 17:47

OK

Schritt-03:
Mit diesem Skript sollte das Bild jetzt im Hauptfenster zuoberst angezeigt werden. Diesmal ohne Zusatzfenster. Bitte kontrollieren:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tkinter
 
 
class MainWindow:
   
    def __init__(self): #, menu):

        # Haupfenster
        self.main = tkinter.Tk()
        self.main.geometry("1000x580")
        
        # Window Icon Set
        self.main.iconbitmap("F:\\Python\\Projekte\\Fiete Pauker\\Fiete Pauker\\Startseite\\Icon.ico")
        self.main.title("Fiete Pauker")
       
        # Titelbild
        self.head = tkinter.Label(self.main)
        self.im = tkinter.PhotoImage(file="F:\\Python\\Projekte\\Fiete Pauker\\Fiete Pauker\\Startseite\\Startseite(klein).png")
        self.head["image"] = self.im
        self.head.pack()
 
        # Begrüßungstext
        self.hallo = tkinter.Label(self.main,
            text = "Hallo\nmein Name ist Fiete P..", font="Arial 20")
        self.hallo.pack()

        self.meister = tkinter.Label(self.main, text = "...!", font="Arial 30")
        self.meister.pack()
 
        #Button 1
        self.kopf = tkinter.Button(self.main, text  = "Button 1",
            command = self.loginwindow)
        self.kopf["bg"] = "#14ADA0"
        self.kopf["fg"] = "#FFFFFF"
        self.kopf["relief"] = "flat"
        self.kopf["height"] = 3
        self.kopf["width"] = 29
        self.kopf["font"] = "Arial 15 bold"
        self.kopf.pack(padx = 70, pady = 20, side = "left")
 
        #Button 2
        self.blatt = tkinter.Button(self.main, text  = "Button 2")
        self.blatt["bg"] = "#1894CE"
        self.blatt["fg"] = "#FFFFFF"
        self.blatt["relief"] = "flat"
        self.blatt["height"] = 3
        self.blatt["width"] = 29
        self.blatt["font"] = "Arial 15 bold"
        self.blatt.pack(padx = 70, pady = 20, side = "right")

    def loginwindow(self):
        print("Hier started der Login")
        
startseite = MainWindow()
startseite.main.mainloop()
Gruss wuf :wink:
Take it easy Mates!
l30n100
User
Beiträge: 19
Registriert: Sonntag 18. Februar 2018, 14:15

Dienstag 6. März 2018, 18:09

Ja, da funktioniert alles.

Lg
Benutzeravatar
wuf
User
Beiträge: 1497
Registriert: Sonntag 8. Juni 2003, 09:50

Dienstag 6. März 2018, 20:15

OK l30n100

Hier dein Skript mit deiner Konfiguration anders zusammengesetzt. Die Bilder sollten jetzt im Hauptfenster und im Auswahlfenster angezeigt werden. Beim Aufruf des Loginfensters wird das Hauptfenster unsichtbar. Beim Abbruch des Logins wird das Hauptfenster wieder sichtbar. Bei einem korrekten Login wird das Loginfenster unsichtbar und das Auswahlfenster öffnet. Beim Abmelden aus dem Auswahlfenster schliesst das Auswahlfenster und das Hauptfenster wird wieder sichtbar und ist bereit für einen neuen Login. Aus den Klassen LoginWindow und HeaderMenuWindow (Auswahlfenster) können mittels einer Referenz der Klasse MainWindow deren Methoden aufgerufen werden. Bitte teste und studiere das folgende Skript:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tkinter


#Kopfrechen - Auswahlmenü
class HeadMenuWindow:
 
    def __init__(self, mainwindow):
        # Referenz der MainWindow-Klasse
        self.mainwindow = mainwindow
        
        #Standard
        self.headmenu = tkinter.Toplevel()
        self.headmenu.title("Auswahl")
        self.headmenu.geometry("1000x580")
        self.headmenu.iconbitmap("F:\\Python\\Projekte\\Fiete Pauker\\Fiete Pauker\\Startseite\\Icon.ico")
 
        #Titelbild
        self.image = tkinter.PhotoImage(file="F:\\Python\\Projekte\\Fiete Pauker\\Fiete Pauker\\Kopfrechen\\Kopfrechen Menu(neu).png")
        self.head = tkinter.Label(self.headmenu)
        self.head.pack()
        self.head["image"] = self.image
 
        #Angemeldet als
        self.login_as = tkinter.Label(self.headmenu, text = "...")
        self.login_as["fg"] = "#000000"
        self.login_as["bg"] = "#FFFFFF"
        self.login_as["font"] = "Arial 15"
        self.login_as.place(rely = 0.33, relx = 0.83)
 
        #Abmelden
        self.logout = tkinter.Button(self.headmenu, text = "Abmelden",
            command=self.abmelden)
        self.logout["font"] = "Arial 15 bold"
        self.logout["relief"] = "flat"
        self.logout["bg"] = "#D1D1D1"
        self.logout["fg"] = "#FFFFFF"
        self.logout["height"] = 1
        self.logout["width"] = 12
        self.logout.place(rely = 0.912, relx = 0.834)
 
        #2
        self.result = tkinter.Button(self.headmenu, text = "...")
        self.result["font"] = "Arial 15 bold"
        self.result["relief"] = "flat"
        self.result["bg"] = "#ff0000"
        self.result["fg"] = "#FFFFFF"
        self.result["height"] = 7
        self.result["width"] = 14
        self.result.place(rely = 0.27, relx = 0.05)
 
        #1
        self.quad = tkinter.Button(self.headmenu, text = "...")
        self.quad["relief"] = "flat"
        self.quad["height"] = 2
        self.quad["width"] = 16
        self.quad["fg"] = "#FFFFFF"
        self.quad["bg"] = "#ffe500"
        self.quad["font"] = "Arial 15 bold"
        self.quad.place(rely = 0.82, relx = 0.054)

    def abmelden(self):
        self.headmenu.destroy()
        # Hier wird die Methode 'auswahl_abmelden' der MainWindow-Klasse
        # aufgerufen mittels der Referenz der MainWindow-Klasse
        # (self.mainwindow)
        self.mainwindow.auswahl_abmelden()
        
class LogInWindow:
    
    def __init__(self, mainwindow):
        # Referenz der MainWindow-Klasse
        self.mainwindow = mainwindow
        
        self.login = tkinter.Toplevel()
        self.login.title("Anmeldung")
        self.login.geometry("261x130")
        self.login.iconbitmap("F:\\Python\\Projekte\\Fiete Pauker\\Fiete Pauker\\Startseite\\Icon.ico")
        
        #Widgets
        self.logintxt1 = tkinter.Label(self.login, text = "Bitte melden Sie sich an")
        self.logintxt1["font"] = "Arial 10 bold"
        self.logintxt1.place(relx = 0.5, y = 6, anchor = "n")

        self.logintxt2 = tkinter.Label(self.login, text = "Benutzername:")
        self.logintxt2["font"] = "Arial 10"
        self.logintxt2.place(x = 10, y = 30, anchor = "nw")

        self.e1 = tkinter.Entry(self.login)
        self.e1.place(x = 120, y = 33, anchor = "nw")

        self.logintxt3 = tkinter.Label(self.login, text = "Passwort:")
        self.logintxt3["font"] = "Arial 10"
        self.logintxt3.place(x = 10, y = 60, anchor = "nw")
   
        self.e2 = tkinter.Entry(self.login, show = "*")
        self.e2.place(x = 120, y = 60, anchor = "nw")

        self.abbruch_button = tkinter.Button(self.login, text = "Abbruch",
            command=self.abbruch)
        self.abbruch_button.place(x = 188, y = 90, anchor = "nw")

        self.los = tkinter.Button(self.login, text = "Login", command=self.pwkopf)
        self.los.place(x = 135, y = 90, anchor = "nw")

        self.verweigern = tkinter.Label(self.login)
        self.verweigern.place(x = 14, y = 91)

    def pwkopf(self):
        self.eingabe = self.e2.get() #Passwort
        self.eingabe1 = self.e1.get() #Nutzername
        if self.eingabe == "123" and self.eingabe1 == "123":
            self.login.destroy()
            # Hier wird die Methode 'login_ok' der MainWindow-Klasse aufgerufen
            # mittels der Referenz der MainWindow-Klasse (self.mainwindow)
            self.mainwindow.login_ok()
        else:
            self.verweigern["text"] = "Zugang verweigert!"
            self.verweigern["font"] = "Arial 10"
            self.verweigern["fg"] = "#FF0000"

    #Extras
    def abbruch(self):
        self.login.destroy()
        # Hier wird die Methode 'login_abbruch' der MainWindow-Klasse aufgerufen
        # mittels der Referenz der MainWindow-Klasse (self.mainwindow)
        self.mainwindow.login_abbruch()

class MainWindow:
   
    def __init__(self): #, menu):

        # Haupfenster
        self.main = tkinter.Tk()
        self.main.geometry("1000x580")
        
        # Window Icon Set
        self.main.iconbitmap("F:\\Python\\Projekte\\Fiete Pauker\\Fiete Pauker\\Startseite\\Icon.ico")
        self.main.title("Fiete Pauker")
       
        # Titelbild
        self.head = tkinter.Label(self.main)
        self.im = tkinter.PhotoImage(file="F:\\Python\\Projekte\\Fiete Pauker\\Fiete Pauker\\Startseite\\Startseite(klein).png")
        self.head["image"] = self.im
        self.head.pack()
 
        # Begrüßungstext
        self.hallo = tkinter.Label(self.main,
            text = "Hallo\nmein Name ist Fiete P..", font="Arial 20")
        self.hallo.pack()

        self.meister = tkinter.Label(self.main, text = "...!", font="Arial 30")
        self.meister.pack()
 
        #Button 1
        self.kopf = tkinter.Button(self.main, text  = "Button 1",
            command = self.loginwindow)
        self.kopf["bg"] = "#14ADA0"
        self.kopf["fg"] = "#FFFFFF"
        self.kopf["relief"] = "flat"
        self.kopf["height"] = 3
        self.kopf["width"] = 29
        self.kopf["font"] = "Arial 15 bold"
        self.kopf.pack(padx = 70, pady = 20, side = "left")
 
        #Button 2
        self.blatt = tkinter.Button(self.main, text  = "Button 2")
        self.blatt["bg"] = "#1894CE"
        self.blatt["fg"] = "#FFFFFF"
        self.blatt["relief"] = "flat"
        self.blatt["height"] = 3
        self.blatt["width"] = 29
        self.blatt["font"] = "Arial 15 bold"
        self.blatt.pack(padx = 70, pady = 20, side = "right")

    def loginwindow(self):
        print("Hier started der Login")
        # Mache das Hauptfenster unsichtbar
        self.main.withdraw()
        # Öffne das Loginfenster
        self.login_window = LogInWindow(self)
    
    def login_ok(self):
        print("Der Login war korrekt. Hier geht es weiter")
        # Öffne das Auswahlfenster
        self.header_menu_window = HeadMenuWindow(self)
 
    def login_abbruch(self):
        print('Der Login wurde abgebrochen')
        # Mache das Hauptfenster wieder sichtbar
        self.main.deiconify()
        
    def auswahl_abmelden(self):
        print('Das Fenster mit der Auswahl wurde geschlossen')
         # Mache das Hauptfenster wieder sichtbar
        self.main.deiconify()

       
startseite = MainWindow()
startseite.main.mainloop()
Gruss wuf :wink:
Take it easy Mates!
l30n100
User
Beiträge: 19
Registriert: Sonntag 18. Februar 2018, 14:15

Sonntag 11. März 2018, 11:08

Hallo wuf,
vielen dank für die Hilfe. :wink:

Lg
Antworten