Probleme bei Eingabe in Textfeld (tkinter) und Ausgabe auf Sense Hat: Space Eingabe führt zu Fehler
Verfasst: Mittwoch 25. September 2024, 19:27
Hallo,
ich versuche ein bischen meine Programmierkünste wieder aufzufrischen und habe mit Python angefangen.
Ich versuche bei unten stehendem Programm herauszufinden warum es mit einer Texteingabe ohne Leerzeichen funktioniert - aber wenn ich ein Leerzeichen in der Eingabe habe, bricht das Programm ab oder macht eine unlogische Fehlermeldung.
Das Programm startet mit einem Eingabefenster welches mit OK abgeschlossen wird. Ausgelesen wird der Test der dann im SenseHat auf der LED Matrix angezeigt wird.
Zur weiteren Erklärung: wenn ich Sound mit drin habe wird gemeldet, dass Sound nicht initialisiert ist - aber nur bei Leerzeichen Eingabe. Benutzt man keine Sound Ausgabe wird die Ausführung ohne Fehlermeldung abgebrochen. Ohne Leerzeichen im Text funktioniert alles.
Ich habe auch schon versucht das Leerzeichen mit "if" abzufangen, da z.B. chatgpt sagt, dass es mit Leerzeichen Probleme gibt, aber auch wenn ich bei Leerzeichen keine Ausgabe an den SenseHat mache, passiert das gleiche.
Programm ist inzwischen etwas chaotischer, da ich schon viele Änderungen versucht habe.
Hat jemand eine Idee?
Danke,
Grüße,
Michael
Die jetzige Fehlermeldung ist:
Traceback (most recent call last):
File "/home/pi/Python_Projekte/SenseHat_Text_ColorChange__mitFensterAbfrage_Texteingabe02b.py", line 90, in <module>
Boing.set_volume(Laut)
pygame.error: mixer system not initialized
Aber löscht man die Sound Befehle bricht das Programm ohne Fehlermeldung auch ab - nach Eingabe im Fenster.
Python Script:
#Import von Bibliotheken
from sense_hat import SenseHat
import time
import random
import pygame
from pynput import keyboard
import tkinter as tk
# Diese Funktion wird aufgerufen, wenn space erkannt wird
def on_press(key):
if key == keyboard.Key.space:
#aufäumen und schliessen
sense.clear()
pygame.quit ()
exit()
# Funktion zur Abfrage Hell-Dunkel und Lauttärke
def get_variables():
# Variablen als Liste
variablen = [None, None, None, None]
#Funktion wenn Ok Button
def submit():
variablen[0] = entry1.get()
variablen[1] = entry2.get()
variablen[2] = entry3.get()
variablen[3] = entry4.get()
Fenster.destroy() # Fenster schließen
# Hauptfenster erstellen
Fenster = tk.Tk()
w = 250 # Fensterbreite
h = 225 # Fensterhöhe
# Fensterbreite unf Höhe der Auflösung auslesen
ws = Fenster.winfo_screenwidth() # Breite
hs = Fenster.winfo_screenheight() # Höhe
# Koordinate für das Fenster
x = (ws/2) - (w/2)
y = (hs/2) - (h/2)
# Dimension des Fensters und Anzeigeort
Fenster.geometry('%dx%d+%d+%d' % (w, h, x, y))
Fenster.title("Stop beendet")
# Labels und Eingabefelder für die zwei Variablen
label1 = tk.Label(Fenster, text="Lautstärke 0-10:")
label1.pack()
entry1 = tk.Entry(Fenster)
entry1.pack()
label2 = tk.Label(Fenster, text="Dunkles Display? j/n")
label2.pack()
entry2 = tk.Entry(Fenster)
entry2.pack()
label3 = tk.Label(Fenster, text="Text: (ohne spaces)")
label3.pack()
entry3 = tk.Entry(Fenster)
entry3.pack()
label4 = tk.Label(Fenster, text="Wiederholungen:")
label4.pack()
entry4 = tk.Entry(Fenster)
entry4.pack()
# Button zum Bestätigen der Eingaben
submit_button = tk.Button(Fenster, text="Ok", command=submit)
submit_button.pack()
# Haupt-Event-Schleife starten
Fenster.mainloop()
return variablen[0], variablen[1], variablen[2], variablen[3] # Variablen an das Programm zurückgeben
#start Listener
listener = keyboard.Listener(on_press=on_press)
listener.start()
#SenseHat initialisieren
sense = SenseHat()
sense.low_light = False
#Mixer initialisieren
pygame.mixer.init(frequency=22050, size=-16, channels=2, buffer=128)
Boing = pygame.mixer.Sound("/home/pi/Python_Projekte/Sound/boing_x.wav")
# Abfrage in Fenster
variable1, variable2, variable3, variable4 = get_variables()
Laut = float(variable1)/10
Boing.set_volume(Laut)
if variable2 == "j":
sense.low_light = True
else:
sense.low_light = False
Laenge = len(variable3)
Buchstabe = variable3
Nochmal = int(variable4)
#Background Loop
for j in range (Nochmal):
#Textfarbe definiren
Hintergrundfarbe = (random. randint(1, 255), random. randint(1, 255), random. randint(1, 255))
#Text Loop
for char in Buchstabe:
#Textfarbe definieren
Textfarbe = (random. randint(1, 255), random. randint(1, 255), random. randint(1, 255))
#Sound spielen
Boing.play()
#Buchstabe anzeigen
sense.show_letter(char, text_colour=(Textfarbe), back_colour=(Hintergrundfarbe))
#Warten
time.sleep(0.7)
#Löschen
sense.clear()
Boing.stop()
pygame.quit()
ich versuche ein bischen meine Programmierkünste wieder aufzufrischen und habe mit Python angefangen.
Ich versuche bei unten stehendem Programm herauszufinden warum es mit einer Texteingabe ohne Leerzeichen funktioniert - aber wenn ich ein Leerzeichen in der Eingabe habe, bricht das Programm ab oder macht eine unlogische Fehlermeldung.
Das Programm startet mit einem Eingabefenster welches mit OK abgeschlossen wird. Ausgelesen wird der Test der dann im SenseHat auf der LED Matrix angezeigt wird.
Zur weiteren Erklärung: wenn ich Sound mit drin habe wird gemeldet, dass Sound nicht initialisiert ist - aber nur bei Leerzeichen Eingabe. Benutzt man keine Sound Ausgabe wird die Ausführung ohne Fehlermeldung abgebrochen. Ohne Leerzeichen im Text funktioniert alles.
Ich habe auch schon versucht das Leerzeichen mit "if" abzufangen, da z.B. chatgpt sagt, dass es mit Leerzeichen Probleme gibt, aber auch wenn ich bei Leerzeichen keine Ausgabe an den SenseHat mache, passiert das gleiche.
Programm ist inzwischen etwas chaotischer, da ich schon viele Änderungen versucht habe.
Hat jemand eine Idee?
Danke,
Grüße,
Michael
Die jetzige Fehlermeldung ist:
Traceback (most recent call last):
File "/home/pi/Python_Projekte/SenseHat_Text_ColorChange__mitFensterAbfrage_Texteingabe02b.py", line 90, in <module>
Boing.set_volume(Laut)
pygame.error: mixer system not initialized
Aber löscht man die Sound Befehle bricht das Programm ohne Fehlermeldung auch ab - nach Eingabe im Fenster.
Python Script:
#Import von Bibliotheken
from sense_hat import SenseHat
import time
import random
import pygame
from pynput import keyboard
import tkinter as tk
# Diese Funktion wird aufgerufen, wenn space erkannt wird
def on_press(key):
if key == keyboard.Key.space:
#aufäumen und schliessen
sense.clear()
pygame.quit ()
exit()
# Funktion zur Abfrage Hell-Dunkel und Lauttärke
def get_variables():
# Variablen als Liste
variablen = [None, None, None, None]
#Funktion wenn Ok Button
def submit():
variablen[0] = entry1.get()
variablen[1] = entry2.get()
variablen[2] = entry3.get()
variablen[3] = entry4.get()
Fenster.destroy() # Fenster schließen
# Hauptfenster erstellen
Fenster = tk.Tk()
w = 250 # Fensterbreite
h = 225 # Fensterhöhe
# Fensterbreite unf Höhe der Auflösung auslesen
ws = Fenster.winfo_screenwidth() # Breite
hs = Fenster.winfo_screenheight() # Höhe
# Koordinate für das Fenster
x = (ws/2) - (w/2)
y = (hs/2) - (h/2)
# Dimension des Fensters und Anzeigeort
Fenster.geometry('%dx%d+%d+%d' % (w, h, x, y))
Fenster.title("Stop beendet")
# Labels und Eingabefelder für die zwei Variablen
label1 = tk.Label(Fenster, text="Lautstärke 0-10:")
label1.pack()
entry1 = tk.Entry(Fenster)
entry1.pack()
label2 = tk.Label(Fenster, text="Dunkles Display? j/n")
label2.pack()
entry2 = tk.Entry(Fenster)
entry2.pack()
label3 = tk.Label(Fenster, text="Text: (ohne spaces)")
label3.pack()
entry3 = tk.Entry(Fenster)
entry3.pack()
label4 = tk.Label(Fenster, text="Wiederholungen:")
label4.pack()
entry4 = tk.Entry(Fenster)
entry4.pack()
# Button zum Bestätigen der Eingaben
submit_button = tk.Button(Fenster, text="Ok", command=submit)
submit_button.pack()
# Haupt-Event-Schleife starten
Fenster.mainloop()
return variablen[0], variablen[1], variablen[2], variablen[3] # Variablen an das Programm zurückgeben
#start Listener
listener = keyboard.Listener(on_press=on_press)
listener.start()
#SenseHat initialisieren
sense = SenseHat()
sense.low_light = False
#Mixer initialisieren
pygame.mixer.init(frequency=22050, size=-16, channels=2, buffer=128)
Boing = pygame.mixer.Sound("/home/pi/Python_Projekte/Sound/boing_x.wav")
# Abfrage in Fenster
variable1, variable2, variable3, variable4 = get_variables()
Laut = float(variable1)/10
Boing.set_volume(Laut)
if variable2 == "j":
sense.low_light = True
else:
sense.low_light = False
Laenge = len(variable3)
Buchstabe = variable3
Nochmal = int(variable4)
#Background Loop
for j in range (Nochmal):
#Textfarbe definiren
Hintergrundfarbe = (random. randint(1, 255), random. randint(1, 255), random. randint(1, 255))
#Text Loop
for char in Buchstabe:
#Textfarbe definieren
Textfarbe = (random. randint(1, 255), random. randint(1, 255), random. randint(1, 255))
#Sound spielen
Boing.play()
#Buchstabe anzeigen
sense.show_letter(char, text_colour=(Textfarbe), back_colour=(Hintergrundfarbe))
#Warten
time.sleep(0.7)
#Löschen
sense.clear()
Boing.stop()
pygame.quit()