Servus Forum,
ich bin Python Anfänger, kann ich aber echt mit der Syntax von Python anfreunden. Damit das auch so bleibt, bitte ich euch um Hilfe. Denn inzwischen sitze ich drei Stunden vor der gleichen Zeile.
Das Problem ist das definieren des Buttons b1, hier speziell am "command". Ohne das "command" geht es... aufgerufen werden soll die nächste Funktion "farbeaendern", egal ob dann Sinn macht oder nicht. Ich hatte auch versucht beim "command" eine Farbe mitzugeben. Das ändert aber alles nichts an der Tatsache, das die Funktion farbeaendern für Eclipse nicht definiert ist. Obwohl sie vor der aufrufenden Funktion steht (darauf bin ich nämlich auch schon reingefallen).
Das sind wirklich nur Tests für mich, bitte sucht nicht nach dem Sinn des Codings
Ich danke euch und viele Grüße
Marco
import tkinter as tk
from tkinter import *
from tkinter import Button
class Schreibgeraete():
def __init__(self, typ, loeschbar, spitzen_breite, nachfuellbar, farbe):
self.typ = typ
self.loeschbar = loeschbar
self.spitzen_breite = spitzen_breite
self.nachfuellbar = nachfuellbar
self.farbe = farbe
def farbeaendern(self,farbe):
self.farbe = farbe
def farbeauswaehlen(self):
f1 = tk.Tk()
b1 = Button(master=f1,text="farbe_in_blau_aendern",command=farbeaendern) <--- hier ist das Problem undefined variable
b1.pack()
f1.mainloop()
point88 = Schreibgeraete("fineliner", "nein", 1, False, "schwarz")
print (point88.farbe)
point88.farbeauswaehlen()
print (point88.farbe)
Anfängerproblem (undefined variable)
-
- User
- Beiträge: 2
- Registriert: Dienstag 31. März 2020, 21:02
Danke danke danke Da wäre ich allerdings nie drauf gekommen. Scheinbar hab ich das in den gängigen Tutorials bisher immer übersehen bzw. noch nie gesehen.
@marco.toegel@web.de: Du hast drei verschiedene Varianten, tkinter zu importieren. Die erste ist die richtige, die zweite wird zum Glück nicht benutzt und die dritte könnte man machen, wird aber bei vielen Namen, die man braucht, irgendwann auch unübersichtlich.
Benutze keine Abkürzungen, was soll die 1 bei f1 und b1? Das ist an sich schon schlecht, weil Nummern keine Aussagekraft haben, wenn es aber nicht einmal ein f2 gibt?
Eine tk-Instanz tief verschachtelt in einer Methode zu haben, ist schlecht, weil es nur ein solches Exemplar im ganzen Programm geben darf. Man schreibt ja auch normalerweise ein GUI-Programm, wo über die gesamte Laufzeit ein Fenster existiert.
Der Knopf heißt zwar "farbe_in_blau_aendern", es steht aber nirgends im Programm "blau", das Argument für den Methodenaufruf fehlt daher auch.
Benutze keine Abkürzungen, was soll die 1 bei f1 und b1? Das ist an sich schon schlecht, weil Nummern keine Aussagekraft haben, wenn es aber nicht einmal ein f2 gibt?
Eine tk-Instanz tief verschachtelt in einer Methode zu haben, ist schlecht, weil es nur ein solches Exemplar im ganzen Programm geben darf. Man schreibt ja auch normalerweise ein GUI-Programm, wo über die gesamte Laufzeit ein Fenster existiert.
Der Knopf heißt zwar "farbe_in_blau_aendern", es steht aber nirgends im Programm "blau", das Argument für den Methodenaufruf fehlt daher auch.
Code: Alles auswählen
import tkinter as tk
from functools import partial
class Schreibgeraete():
def __init__(self, typ, loeschbar, spitzen_breite, nachfuellbar, farbe):
self.typ = typ
self.loeschbar = loeschbar
self.spitzen_breite = spitzen_breite
self.nachfuellbar = nachfuellbar
self.farbe = farbe
def farbeaendern(self, farbe):
self.farbe = farbe
def farbeauswaehlen(self):
main_window = tk.Tk()
tk.Button(master=main_window, text="farbe_in_blau_aendern", command=partial(self.farbeaendern, "blau")).pack()
main_window.mainloop()
point88 = Schreibgeraete("fineliner", "nein", 1, False, "schwarz")
print(point88.farbe)
point88.farbeauswaehlen()
print(point88.farbe)