Hallo allerseits,
ich bin recht schnell mit meinen rudimentären Programmierkünsten an meine Grenzen gestoßen.....
Hab mir eine GUI gebastelt und möchte, dass bei Betätigen des 30-Tage-Durchschnittsbutton in das gelbe Label links daneben einfach ein vorgegebener Wert eingetragen wird, hier der Wert 1 aus dem Array "Lufttemperatur".
Aber:
Es erscheint eine Fehlermeldung:
can only concatenate str (not "int") to str
Theoretisch ist mir klar, dass sich hier Integer und String gegenüberstehen und nicht miteinenander "können". Leider kann ich dieses Problem nicht lösen.
Wer kann mir auf die Sprünge helfen? Nicht mit korrigierten Quellcode - eine Erklärung wäre klasse.
Besten Dank!
Andreas
Hier mein Quelltext:
from tkinter import *
from tkinter import Pack
import tkinter as tk
from array import array
#GPIO.setmode(GPIO.Board)
Lufttemperatur=array("f",[100.6,-200,22,33,44])
def buttonDurchschnittClick():
#Anzeige=(Lufttemperatur[1])
LabelProbe.config(text=(Lufttemperatur[1]))
Fenster = tk.Tk() #Fenster erstellen
Fenster.geometry("640x480")# Fenstergröße
Fenster.wm_title("Gewächshaus") #FensterTitel
Fenster.config(background = "black") #Hintergrund des Fensters
Frame1 = Frame(Fenster, width=0, height =0)# Rahmen richtet sich nach der Zahl und Größe der Buttons
Frame1.grid(row=0, column=0, padx=0,pady=0)# nix ändern
Lufttemperatur=Label(Frame1,width=10, height= 4,text="Luft-\ntemperatur\n °C",background="#6495ED")
Lufttemperatur.pack(side=tk.LEFT, expand=1)
Lufttemperatur.pack(ipadx=0,ipady=0)
#Lufttemperatur.place(x=0,y=2)
Button3 = Button(Frame1,width=10, height=2, text="30 Tage\nDurchnscnitt", background="#FFA550", border=20,activebackground="Yellow",command=buttonDurchschnittClick)
Button3.pack(side=tk.RIGHT, expand=1)
Button3.pack(ipadx=0,ipady=0)
#Label ohne place, hier nur Button Lufttemperatur weiss grün
LabelLufttemperatur=Label(Frame1, width=10, height=0,fg="white",bg="green",font="Arial 8",text="Lufttemperatur")
LabelLufttemperatur.pack(side=tk.TOP, ipadx=10,ipady=0,expand=1)
LabelProbe=Label(Frame1,width=10,height=0,fg="black",bg="yellow")
LabelProbe.pack(side=tk.BOTTOM)
buttonDurchschnitt=Button(Frame1,bg="blue",command=buttonDurchschnittClick)
Fenster.mainloop() # gui wird geupdated. danach keine Elemente
Problem bei Betätigen des Command-Buttons...
Du hast einen *-Import importierst aber gleichzeitig tkinter als tk. Warum beides? Ersteres sollte nicht existieren. tkinter.Pack wird dann nochmal in den eigenen Namensraum eingebunden, aber gar nicht benutzt (ich wüßte auch keinen Grund das jemals zu benutzen).
`array` wird selten gebraucht. Bei Dir ist das nicht der Fall. Da reicht eine einfache Liste.
Die Variable `Lufttemperatur` überschreibst Du dann auch gleich durch ein Label.
Variablennamen schreibt man generell klein, ebenso Funktionen. Globale Variablen benutzt man nicht. Alles was eine Funktion braucht, muß sie über ihre Argumente bekommen.
Die Größe des Fensters ergibt sich durch dessen Inhalt, man gibt keine Größe explizit an.
Was soll die 1 bei Frame1 oder die 3 bei Button3? Variablennamen sollen aussagekräftig sein und keine nichtssagenden Nummern enthalten. Manche Variablen sind gar nicht nötig, wie bei Button3, weil das später nicht mehr gebraucht wird.
Die doppelten pack-Aufrufe sind unsinnig.
`buttonDurchschnitt` wird gar nicht ins Fenster gepackt, ist also überflüssig.
Jetzt wäre es noch nett gewesen, genau zu schreiben, wo der Fehler auftritt.
Du versuchst auf die Option 1 eines Labels zuzugreifen. Optionen haben aber Namen als Strings.
Wenn man raten müßte, willst Du Lufttemperatur gar nicht mit einem Label überschreiben, sondern eigentlich die Liste verwenden.
`array` wird selten gebraucht. Bei Dir ist das nicht der Fall. Da reicht eine einfache Liste.
Die Variable `Lufttemperatur` überschreibst Du dann auch gleich durch ein Label.
Variablennamen schreibt man generell klein, ebenso Funktionen. Globale Variablen benutzt man nicht. Alles was eine Funktion braucht, muß sie über ihre Argumente bekommen.
Die Größe des Fensters ergibt sich durch dessen Inhalt, man gibt keine Größe explizit an.
Was soll die 1 bei Frame1 oder die 3 bei Button3? Variablennamen sollen aussagekräftig sein und keine nichtssagenden Nummern enthalten. Manche Variablen sind gar nicht nötig, wie bei Button3, weil das später nicht mehr gebraucht wird.
Die doppelten pack-Aufrufe sind unsinnig.
`buttonDurchschnitt` wird gar nicht ins Fenster gepackt, ist also überflüssig.
Jetzt wäre es noch nett gewesen, genau zu schreiben, wo der Fehler auftritt.
Du versuchst auf die Option 1 eines Labels zuzugreifen. Optionen haben aber Namen als Strings.
Wenn man raten müßte, willst Du Lufttemperatur gar nicht mit einem Label überschreiben, sondern eigentlich die Liste verwenden.
Code: Alles auswählen
from functools import partial
import tkinter as tk
def button_durchschnitt_click(label_probe, lufttemperatur):
label_probe.config(text=lufttemperatur[1])
def main():
lufttemperatur = [100.6,-200,22,33,44]
fenster = tk.Tk()
fenster.wm_title("Gewächshaus")
fenster.config(background = "black")
frame = tk.Frame(fenster, width=0, height =0)
frame.grid(row=0, column=0, padx=0,pady=0)
tk.Label(frame, width=10, height=4,
text="Luft-\ntemperatur\n °C", background="#6495ED"
).pack(side=tk.LEFT, expand=1)
label_probe = tk.Label(frame, width=10, height=0, fg="black", bg="yellow")
tk.Button(frame, width=10, height=2,
text="30 Tage\nDurchnscnitt", background="#FFA550",
border=20,activebackground="Yellow",
command=partial(button_durchschnitt_click, label_probe, lufttemperatur)
).pack(side=tk.RIGHT, expand=1)
label_lufttemperatur = tk.Label(frame, width=10, height=0,
fg="white",bg="green",font="Arial 8", text="Lufttemperatur")
label_lufttemperatur.pack(side=tk.TOP, ipadx=10, ipady=0, expand=1)
label_probe.pack(side=tk.BOTTOM)
fenster.mainloop()
if __name__ == "__main__":
main()