Seite 1 von 1

Befehl in der Menüleiste wird schon beim Starten ausgeführt

Verfasst: Dienstag 15. September 2015, 11:56
von nobbe75
Hallo,
ich habe mir ein Formular erstellt und wollte dieses jetzt noch mit einer Meüleiste ergänzen. Dazu habe ich den folgenden Code eingebaut (Nur ein Auszug, den Kern des Programms habe ich mir gespart).

Code: Alles auswählen

from tkinter import *
from tkinter import messagebox
import menu_functions

class GUI(Frame):
    def __init__(self, mainformular):
        Frame.__init__(self, mainformular, relief=SUNKEN, bd=2)
        self.menubar = Menu(self)
        menu = Menu(self.menubar, tearoff=0)
        self.menubar.add_cascade(label="Datei", menu=menu)
        menu.add_command(label="Neu", command=menu_functions.writedata("Test"))
        menu = Menu(self.menubar, tearoff=0)
        self.menubar.add_cascade(label="Bearbeiten", menu=menu)
        menu.add_command(label="Ausschneiden")
        menu.add_command(label="Kopieren")
        menu.add_command(label="Einfügen")

        try:
            self.master.config(menu=self.menubar)
        except AttributeError:
            self.master.tk.call(master, "config", "-menu", self.menubar)

        # Restlicher Code
      
#Fenster erzeugen 
root = Tk()
root.geometry('1000x800')
fenster = GUI(root)
root.mainloop()
Das Problem ist, das ich beim laden des Programmfensters gleich der Befehl

Code: Alles auswählen

 menu.add_command(label="Neu", command=menu_functions.writedata("Test"))
ausgeführt wird. Danach ist der Menüeintrag Datei/Neu ohne Funktion.

Ich hoffe mir kann jemand erklären was da schief läuft.

Grüße
Nobbe

Re: Befehl in der Menüleiste wird schon beim Starten ausgefü

Verfasst: Dienstag 15. September 2015, 12:21
von Hyperion
nobbe75 hat geschrieben: Das Problem ist, das ich beim laden des Programmfensters gleich der Befehl

Code: Alles auswählen

 menu.add_command(label="Neu", command=menu_functions.writedata("Test"))
ausgeführt wird. Danach ist der Menüeintrag Datei/Neu ohne Funktion.

Ich hoffe mir kann jemand erklären was da schief läuft.
Du *rufst* die Methode ``writedata`` vom ``menu_functions``-Objekt innerhalb von ``menu.add_command`` bereits auf! Also wird sie auch ausgeführt ;-)

Du willst an der Stelle aber nur die *Methode* übergeben! Der Aufruf soll ja dann erst von Tk aus erfolgen, wenn die Aktion ausgewählt worden ist.

Damit das bei Callables mit Parametern klappt, kannst Du z.B. mit ``partial``-Objekten arbeiten. Wie das geht kannst Du hier im Forum in unzähligen Threads nachlesen. Suche mal nach "Tk" und "partial" - da solltest Du etwas finden.

Re: Befehl in der Menüleiste wird schon beim Starten ausgefü

Verfasst: Dienstag 15. September 2015, 12:40
von nobbe75
@Hyperion

Super, gefunden, verstanden (hoff ich :D ), und schon funktionierts.

Vielen Dank

Re: Befehl in der Menüleiste wird schon beim Starten ausgefü

Verfasst: Dienstag 15. September 2015, 14:10
von Hyperion
nobbe75 hat geschrieben: Vielen Dank
Bitte :D