Seite 1 von 1

Winsound - alle Sounds stoppen

Verfasst: Donnerstag 6. Oktober 2011, 19:47
von zappa
Hab' nur ein kleines Probelm:
ich starte mit einer Methode: winsound.Beep(3000,30) einen Ton (mit einem Button in Tkinter). Mit welchem Befehl kann ich denn alle laufenden Sounds wieder stoppen?
Danke schon mal...

Re: Winsound - alle Sounds stoppen

Verfasst: Donnerstag 6. Oktober 2011, 20:09
von BlackJack
@zappa: Dafür scheint das `winsound`-Modul nichts vorzusehen.

Re: Winsound - alle Sounds stoppen

Verfasst: Donnerstag 6. Oktober 2011, 20:19
von zappa
Oh je :(

hatte irgendwo SND_PURGE gefunden, konnte aber nicht wirklich etrwas damit anfangen.
Gibts denn sonst noch irgend ne Möglichkeit den Computer stumm zu schalten?

Re: Winsound - alle Sounds stoppen

Verfasst: Donnerstag 6. Oktober 2011, 20:20
von BlackJack
@zappa: Stecker ziehen. Entweder den zu den Lautsprechern, oder den Netzstecker. :twisted:

Re: Winsound - alle Sounds stoppen

Verfasst: Donnerstag 6. Oktober 2011, 20:43
von zappa
:) alles klar - ich werde wohl eher den Hammer bemühen 8)

Re: Winsound - alle Sounds stoppen

Verfasst: Freitag 7. Oktober 2011, 10:29
von pythonstarter
Setze beim Start deines Sounds eine Variable auf "True".
Wenn du den Sound beenden möchtest überprüfst du die Variable, wenn sie "FALSE" ist, dann stoppt der Sound.

Re: Winsound - alle Sounds stoppen

Verfasst: Freitag 7. Oktober 2011, 20:04
von BlackJack
@pythonstarter: Äh, eher nicht…

Re: Winsound - alle Sounds stoppen

Verfasst: Samstag 8. Oktober 2011, 15:26
von pythonstarter
Ähm - doch.
Aber ich geb schon zu, habe mich sehr unklar ausgedrückt.

Hab es so gemacht:
Beim Start-Button wird eine Variable auf "True" gesetzt. Bei der Überprüfung (if variable == True) wird der Ton gestartet.
Jetzt wird mit der after-Methode von Tkinter jede Sekunde überprüft, ob die Variable
noch auf "True" gestetzt ist (im Prinzip startet der Ton dann jedesmal von vorn).
Wenn ich den Stop-Button drücke, wird die Variable auf "False" gesetzt - wenn jetzt die
Überprüfung statt findet, dann wird der Ton nicht mehr gestartet.
Also bei mir funktionierts.

Re: Winsound - alle Sounds stoppen

Verfasst: Samstag 8. Oktober 2011, 15:43
von BlackJack
@pythonstarter: Die Frage war nicht wie man einen Ton gar nicht erst startet, sondern wie man einen bereits gestarteten wieder stoppt.

Re: Winsound - alle Sounds stoppen

Verfasst: Samstag 8. Oktober 2011, 18:53
von pythonstarter
Ok, ok :)

Also ich hatte vor langer Zeit mal nen Wecker geschrieben, bei dem hat's funktioniert. In die Entrys kann man die gewünschte Uhrzeit eintragen - dann beginnt der BEEP.

Code: Alles auswählen

import tkinter as tk
import time
import winsound

def zeiten():
    lt = time.localtime()
    
    zeit = lt[3], ":" , lt[4] , ":" , lt[5]
       
    label.config(text = zeit)
 
    main.after(1000, zeiten)
    if int(entry_std.get()) == int(lt [3]) and int(entry_min.get()) == int(lt[4]):
            winsound.Beep(4000, 100)
            

def stop():
    entry_std.delete(0,"end")
    entry_std.insert("end", 0)
    entry_min.delete(0,"end")
    entry_min.insert("end", 0)
    entry_sek.delete(0,"end")
    entry_sek.insert("end", 0)
    
 
main = tk.Tk()

label_std = tk.Label(main, text = "Std")
label_std.grid(row = 0, column = 0)

entry_std = tk.Entry(main, width = 9, justify = "center")
entry_std.grid(row = 1, column = 0)
entry_std.insert("end", 0)

label_min = tk.Label(main, text = "Min")
label_min.grid(row = 0, column = 1)

entry_min = tk.Entry(main, width = 9,justify = "center")
entry_min.grid(row = 1, column = 1)
entry_min.insert("end", 0)

label_sek = tk.Label(main, text = "Sek")
label_sek.grid(row = 0, column = 2)

entry_sek = tk.Entry (main, width = 9, justify = "center")
entry_sek.grid(row = 1, column = 2)
entry_sek.insert("end", 0)

label = tk.Label(main, text = "Hier steht dann die Uhr")
label.grid(columnspan = 5)

start_button = tk.Button(main, text = "Start", command = zeiten)
start_button.grid()

stop_button = tk.Button(main, text = "Stop", command = stop)
stop_button.grid()


main.mainloop()