Python: Wie kann ich feld1 bis feld7 so zusammenfassen, sodass ich das nicht alles einzeln eingeben muss?
Hey, ich möchte feld1 bis feld7 so zusammenfassen, sodass ich das nicht alles einzeln eingeben muss. Dazu finde ich nur leider nichts im Internet.
import tkinter as tk from tkinter import *
modul = tk.Tk()
modul.geometry("900x900")
modul.title("Bunt3x3")
modul.resizable(width=False, height=False)
r = "red"
y = "yellow"
g = "green"
b = "blue"
def change():
if feld1["bg"] == r:
feld1.config(bg=g)
feld3.config(bg=g)
feld5.config(bg=g)
feld7.config(bg=g)
feld2.config(bg=b)
feld4.config(bg=b)
feld6.config(bg=b)
feld8.config(bg=b)
feldlabel.config(text="Rot & gelb")
elif feld1["bg"] == g:
feld1.config(bg=r)
feld3.config(bg=r)
feld5.config(bg=r)
feld7.config(bg=r)
feld2.config(bg=y)
feld4.config(bg=y)
feld6.config(bg=y)
feld8.config(bg=y)
feldlabel.config(text="Gruen & blau")
feld1 = tk.Frame(bg=r, width=300, height=300)
feld1.grid(column=1, row=1)
feld3 = tk.Frame(bg=r, width=300, height=300)
feld3.grid(column=3, row=1)
feld5 = tk.Frame(bg=r, width=300, height=300)
feld5.grid(column=1, row=3)
feld7 = tk.Frame(bg=r, width=300, height=300)
feld7.grid(column=3, row=3)
feld2 = tk.Frame(bg=y, width=300, height=300)
feld2.grid(column=2, row=1)
feld4 = tk.Frame(bg=y, width=300, height=300)
feld4.grid(column=1, row=2)
feld6 = tk.Frame(bg=y, width=300, height=300)
feld6.grid(column=3, row=2)
feld8 = tk.Frame(bg=y, width=300, height=300)
feld8.grid(column=2, row=3)
feld = tk.Frame(bg="white", width=300, height=300).grid(column=2, row=2)
feldlabel = tk.Label(text="Gruen & blau", bg="white", fg="black", font=("Arial", 15, "bold"))
feldlabel.grid(column=2, row=2)
feldbutton = tk.Button(text="Farbe aendern!", font=("Arial", 15, "bold"), bg="white", fg="black", command=change).place(x=370, y=470)
modul.mainloop()
2 Antworten
vielleicht besser du postest sowas auf pastebin.com und hier den link dann dazu.
generell wird sowas in arrays gemacht , alo sowas wie feld[index] und das ganze in for schleifen wenn es immer das gleiche sein soll .
dann hast du es falsch gemacht. den das ist die standard lösung in allen programmiersprachen . nur musst du auch das richtige array nutzen .
Dann schreib doch bitte mal eine Lösung!
dazu müsstest du erstmal dein code richtig posten (hab ich ja beschrieben wie man das macht) . und vielleicht deinen versuch mit array auch noch dazu . schließlich willst du hier hilfe und mti deinem copy paste kann keine sau was anfangen .
das ist erstmal das gleiche mit array, jetzt kannst du gerne mit einem for schleife das zusammenfassen , das es nur noch 1 mal vorkommt und nciht redundant.
wobei das nicht so einfach sein wird , denn column und row ändet sich ja , aber auch da kann man einiges machen , musst halt eine logik finden wie sich sowas aufbauen lässt , z.b. mit for und if in kombination .
z.b. kann man dein grid einfach mit 2 for schleifen in einander aufbauen .
eine for schleife für column und dadrinne dann eine schleife für row
dann brauch man nur 1 zeile .
Mit Listen, Schleifen und gegebenenfalls auch Funktionen lässt sich dein Quelltext erheblich verkürzen.
Schau zunächst nach Code, der sich öfter wiederholt und bilde zu diesem Abstraktionen / eine jeweils allgemeine Regel.
Ein Beispiel wäre das Erstellen der Frames:
fields = []
for i in range(0, 8):
field = tk.Frame(bg=r, width=300, height=300)
fields.append(field)
oder hier bei der Prüfung in deiner Funktion:
if fields[0]["bg"] == r:
for field in range(len(fields)):
fields[i].config(bg=g)
# etc. ...
mit arrays hab ich es schon probiert aber danke