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: 17825
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: 13239
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@WvonRiedi: Und warum kannst Du das nicht?
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
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