Ein Label im Frame vom Menu ansprechen

Fragen zu Tkinter.
Antworten
WvonRiedi
User
Beiträge: 36
Registriert: Mittwoch 20. Januar 2021, 20:46

Ich möchte gerne vom Menu ein Label im Frame ansprechen. Leider hatten alle meine Versuche keinen Erfolg

Code: Alles auswählen

import tkinter as tk
from tkinter import ttk,Button, Tk,Entry, END,Label

class HauptFenster(tk.Tk): 
    def __init__(self):
        super().__init__()
        
         # ------------- Label löschen --------------------------------------------------
        def labellöschen():
            self.name_label.grid_forget(self, container)
        
        menuleiste = tk.Menu(self)
        
        datei_Sonstiges = tk.Menu(menuleiste, tearoff=0)
        datei_Sonstiges.add_command(label="Label löschen", command=labellöschen)#, Labellöschen
        
        menuleiste.add_cascade(label="Sonstiges", menu=datei_Sonstiges)

        self.config(menu=menuleiste)
        EingabeFrame(self).pack()

class EingabeFrame(ttk.Frame):  

    def __init__(self, container):
        super().__init__(container)
        
        def löschen():
            # Label löschen 
            self.name_label.grid_forget()       
        
        self.löschen_button = ttk.Button(self, text="Label löschen", command=löschen)
        self.löschen_button.grid(column=0, row=8,  sticky="W",pady="10")
        
        self.name_label = ttk.Label(self, text="Diesen Text löschen" ,background="red", foreground ="white",font=("Helvetica", 16))
        self.name_label.grid(column=0, row=9,columnspan=2,  sticky="W",pady="10")
        
fenster = HauptFenster() #

fenster.mainloop()

Danke für eine Tipp
Werner
Sirius3
User
Beiträge: 17761
Registriert: Sonntag 21. Oktober 2012, 17:20

Man definiert keine Funktionen innerhalb von Methoden, dazu sind doch Methode da.
Um etwas aus dem HauptFenster heraus mit dem Eingabeframe machen zu können, muß das Hauptfenster auch das Eingabeframe kennen.

Code: Alles auswählen

import tkinter as tk
from tkinter import ttk

class HauptFenster(tk.Tk): 
    def __init__(self):
        super().__init__()
        
        self.eingabeframe = EingabeFrame(self)
        self.eingabeframe.pack()
        
        menuleiste = tk.Menu(self)
        datei_Sonstiges = tk.Menu(menuleiste, tearoff=0)
        datei_Sonstiges.add_command(label="Label löschen", command=self.eingabeframe.labellöschen)
        menuleiste.add_cascade(label="Sonstiges", menu=datei_Sonstiges)
        self.config(menu=menuleiste)

class EingabeFrame(ttk.Frame):  

    def __init__(self, container):
        super().__init__(container)
        
        self.löschen_button = ttk.Button(self, text="Label löschen", command=self.labellöschen)
        self.löschen_button.grid(column=0, row=8,  sticky="W",pady="10")
        
        self.name_label = ttk.Label(self, text="Diesen Text löschen" ,background="red", foreground ="white",font=("Helvetica", 16))
        self.name_label.grid(column=0, row=9,columnspan=2,  sticky="W",pady="10")

    def labellöschen(self):
        self.name_label.grid_forget()       
        

def main():
    fenster = HauptFenster()
    fenster.mainloop()

if __name__ == "__main__":
    main()
WvonRiedi
User
Beiträge: 36
Registriert: Mittwoch 20. Januar 2021, 20:46

Danke für die Antwort.

Wenn ich am Schluss des Codes

def main():
fenster = HauptFenster()
fenster.mainloop()

if __name__ == "__main__":
main()

Kann ich den Code nicht Direkt von Desktop (Windows10) starten.
Ich starte das Programm mit:

"C:\Users\Wvr\PhytonDateien\label.py"

Gruss Werner
Benutzeravatar
__blackjack__
User
Beiträge: 13123
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@WvonRiedi: Und warum kannst Du das nicht?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
WvonRiedi
User
Beiträge: 36
Registriert: Mittwoch 20. Januar 2021, 20:46

Das ist mir auch ein Rätsel. Das Programm startet nicht :( .
Mit :
fenster = HauptFenster()
fenster.mainloop()
am Schluss des Code startet das Programm.

Wenn ich den Code mit Jupyter Notebook starte geht's auch mit

def main():
..................
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wie startest du das denn? In der Konsole? Oder einer IDE wie IDLE?
WvonRiedi
User
Beiträge: 36
Registriert: Mittwoch 20. Januar 2021, 20:46

Weis jetzt nicht was Du meinst.
Ich habe unter "Standart-Apps nach Dateityp auswählen" bei der Endung py "Python 3.9" angegeben.
Danach mache ich ein Link auf dem Desktop auf die *label.py* Datei. Mit einem Doppelklick auf den Link erscheint das Fenster.
Antworten