Den viktigaste faktorn när jag skrev programmet var att det ska vara kort och lätt att förstå. Trots det (eller kanske just därför) blev det så bra att jag nu använder det nästan dagligen, som teklocka.
Förberedelse:
- Installera paketen
python-tk,
sox och
libsox-fmt-all (om inte redan installerade)
- Leta reda på en kort ljud-fil och kopiera den till ~/Musik/apskrik.mp3
- Skapa i din hemmamapp mapparna bin och man och man/man1, (om du inte redan har dem)
- Logga ut och in igen (om du just skapat nämnda mappar)
- Kopiera följande text till en fil ~/man/man1/myäggklocka2.1
Kod: Markera allt
.TH myäggklocka2 l .SH NAMN myäggklocka2 - enkel grafisk nedräknande klocka med larm .SH SYNOPSIS .B myäggklocka2 [LJUDFIL] .SH BESKRIVNING Räkna ner från inställd tid och larma när tiden blir 0. Larm innebär att LJUDFIL spelas, eller, om ingen ljudfil har angivits, ~/Musik/apskrik.mp3, samt att tidvisningen börjar blinka. .PP Inställning av tid kan göras med knapparna + och - i det grafiska gränssnittet och med knapparna + och - på tangentbordet. .TP .B + Öka inställd tid med 1 minut och starta nedräkning om den inte redan pågår. Max inställbar tid är 30 minuter. .TP .B - Minska inställd tid med 1 minut. Om inställd tid minskas till 0 aktiveras larmet. Om larmet redan har aktiverats så gör knappen att tidvisningen slutar blinka. .TP .B Stäng Stäng programmet. Eventuellt pågående nedräkning avbryts. .SH SE ÄVEN myäggklocka1(1) .SH FÖRFATTARE David Andersson
- Titta på den nya manualsidan med man myäggklocka2 (första gången kan man behöva skriva man -u myäggklocka2)
- Sluta titta på manualsidan med q
- Kopiera följande text till en fil ~/bin/myäggklocka2
Kod: Markera allt
#!/usr/bin/python # encoding: utf-8 # Copyleft (C) 2010 David Andersson # # Äggklocka med enkelt grafiskt gränssnitt. Spelar ljud efter vald tid. # # Beroenden: paketet 'python-tk' för gui:t, paketet 'sox' för att spela ljudfil import sys, time, os from Tkinter import * # Ljudfilnamn valfritt argument på kommandoraden, default ~/Musik/apskrik.mp3 try: ljudfil = sys.argv[1] except IndexError: ljudfil = os.path.expanduser('~/Musik/apskrik.mp3') STILLA = 0 # Klockans tre möjliga tillstånd (konstanter) TAR_TID = 1 LARMAR = 2 status = STILLA # Börja i 0:00 läge och vänta på iställning av tid sluttid = None # Inställd larmtidpunkt, mätt i sekunder sedan 1 jan 1970 def bygg_upp_grafiskt_granssnitt(): topp_widget = Tk() topp_widget.title('Äggklocka') # Tangentbordsknappar topp_widget.bind('+', plus_knapp_callback) topp_widget.bind('-', minus_knapp_callback) global label_widget # Tid-visning label_widget = Label(topp_widget, text='0:00', relief=SUNKEN, width=6, font=('sans',18), background='black') # Grafiska knappar minus_knapp = Button(topp_widget, text='-', command=minus_knapp_callback) plus_knapp = Button(topp_widget, text='+', command=plus_knapp_callback) exit_knapp = Button(topp_widget, text='Stäng', command=quit) for knapp in (minus_knapp, plus_knapp): knapp.config(repeatdelay=1000, repeatinterval=200) # Placering inom topp_widget, vänster till höger label_widget.pack(side=LEFT) minus_knapp.pack(side=LEFT) plus_knapp.pack(side=LEFT) exit_knapp.pack(side=LEFT) return topp_widget def kolla_om_sluttid(): global status if status==TAR_TID and just_nu() >= sluttid: os.system('play -q "'+ljudfil+'" &') status = LARMAR def uppdatera_visad_tid(): if status==STILLA: label_widget.config(foreground='cyan') elif status==TAR_TID: tid_kvar = sluttid - just_nu() label_widget.config(text=sekunder_som_text(tid_kvar), foreground='cyan') elif status==LARMAR: noll_eller_ett = int(just_nu()) % 2 # udda/jämna sekund farg = ['cyan', 'orange'][noll_eller_ett] label_widget.config(foreground=farg) def plus_knapp_callback(argument=None): global sluttid, status if status==TAR_TID: sluttid = min(sluttid+60+0.2, just_nu()+30*60+1) else: sluttid = just_nu()+60+0.8 status = TAR_TID uppdatera_visad_tid() def minus_knapp_callback(argument=None): global sluttid, status if status==TAR_TID: sluttid = max(sluttid-60, just_nu()+1) else: status = STILLA uppdatera_visad_tid() def varje_sekund_callback(): kolla_om_sluttid() uppdatera_visad_tid() topp_widget.after(1000, varje_sekund_callback) def sekunder_som_text(sekunder): # returnera sträng min:sek, t.ex. '3:21' minuter = int(sekunder/60) sekunder = int(sekunder - minuter*60) return '%d:%02d' % (minuter, sekunder) def just_nu(): return time.time() # Starta upp allt topp_widget = bygg_upp_grafiskt_granssnitt() topp_widget.after_idle(varje_sekund_callback) topp_widget.mainloop()
- Gör filen körbar, med högerklick > egenskaper > rättigheter eller med chmod +x ~/bin/myäggklocka2
- Starta programmet i en terminal med myäggklocka2
- Tryck på + en gång
- Om den börjar räkna ner och ljudfilen spelas efter 1 minut så funkar det
- Om det fungerar, lägg en program-startare i panelen. Högerklicka i panelen > lägg till panel välj anpassad programstartare, lägg till och ange kommando myäggklocka2