ich bin noch relativ neu bei Python und komme bei einem Problem nicht weiter (logisch, sonst wäre ich ja nicht hier...)
Ich habe ein Programm geschrieben, dass Rezepte aus einer DB (sqlite3) ausliest und neue Rezepte einträgt. Das Programm habe ich im zweiten Anlauf dann auch so hinbekommen, dass ich die Logik komplett in Funktionen und Klassen gepackt habe und das Programm in der Kommandozeile alles macht was es soll (m.E. einigermaßen Objektorientiert). Der nächste Schritt ist jetzt die Programmierung eines GUI.
Deshalb jetzt meine Fragen:
- In vielen Beispielen sieht man, dass jedes neue Fenster eine neue Klasse bekommt. Das erschließt sich mir noch nicht so ganz, wieso das gemacht wird. Könnte ich nicht z.B. auch nur Funktionen verwenden? Oder erleichter das Organisieren in Klassen das "löschen" bzw. schließen eines Fensters? Dass ich es aus Gründen der Übersichtlichkeit nicht einfach untereinander code, wie ich das bei meinen aller ersten Versuchen noch gemacht habe erschließt sich mir mittlerweile. Die Frage ist offensichtlich noch etwas theoretisch, aber ich steige eben leider nicht ganz durch. Mein Argument wäre nämlich, dass ich jedes Fenster ja nur ein mal brauche und deshalb der Vorteil einer Klasse (jedes Objekt hat die gleichen Eigenschaften) ja total umsonst sind, da ich für 10 Fenster auch 10 Klassen brauche.
- Wenn ich einen Button erstelle, dann soll dieser ja eine Funktion aufrufen. In welcher Instanz erstelle ich denn diese Funktion? Innerhalb der Klasse? Dann kommt bei mir die Fehlermeldung, die Funktion sei nicht bekannt (siehe Code unten). Wenn ich die Funktion außerhalb der Klasse erstelle ist die Variable die ich abfrage nicht bekannt.
- Der Code beschreibt das zweite Fenster innerhalb des Programms (deshalb Toplevel). Vorher gibt es ein Fenster, das eine Auswahlmöglichkeit bietet, ob ein Rezept abgefragt oder ein neues eingetragen werden soll. Dort wird dann die Klasse "RezeptEingabe" aufgerufen und entsprechend der vorliegende Code ausgeführt. Aktuell ist es noch so, dass ich dann das zweite Fenster öffne und das erste weiterhin offen bleibt, ich habe also 2 große Fenster auf dem Bildschirm. Das ist ja nicht wirklich schön. Wie könnte ich denn immer nur ein Fenster geöffnet haben? Ich hatte überlegt mit Frames zu arbeiten, diese dann zu entfernen. Ich hab mich da aber noch nicht genauer eingelesen. Ist das grundsätzlich ein Möglicher Ansatz oder welche Ideen habt ihr? Dann würde ich mich damit nochmal genauer auseinander setzen, wenn die jetzigen Probleme gelöst sind.
Angehängt der Code, ich danke euch schon mal für eure Hilfe und bleibt Gesund!!
Code: Alles auswählen
import tkinter as tk
####--- Wenn die Funktion von unten hier steht kommt der Fehler "name" sei nicht bekannt
class RezeptEingabe:
####----------An dieser Stelle kommt ein NameError: Funktion "abfragen" ist nicht bekannt--------#
def abfragen():
# Die Funktion soll die Variable übernehmen, die wird dann an den "Logikteil" übergeben und dann passiert Magie
gerichtname = name.get()
print(gerichtname)
def __init__(self):
#Erzeugen des Fensters
fenster = tk.Toplevel()
fenster.geometry("400x400")
fenster.title("Rezepteingabe")
#Dialog, abfragen wie das Gericht heißt
text3 = tk.Label(fenster, text = "Name des Gerichts?")
text3.grid(row = 2, column = 0, sticky = "w")
name = tk.Entry(fenster, bg = "white")
name.grid(row = 2, column =1, sticky = "e")
#Erstellen zweier Knöpfe, hier wird die Funktion aufgerufen.
knopfWeiter = tk.Button(fenster, text = "Okay", command = abfragen)
knopfWeiter.grid(row = 3, column = 1)
knopfAbbrechen = tk.Button(fenster, text = "Abbrechen", bg = "red")
knopfAbbrechen.grid(row = 3, column = 0)