개발자 승학

파이썬 알람 만들기(pygame, tkinter) 본문

it/python(파이썬)

파이썬 알람 만들기(pygame, tkinter)

유승학 2018. 6. 5. 20:11

파이썬으로 만드는 간단한 알람프로그램입니다.


pygame 라이브러리에는 음악을 재생시키는 기능이 있습니다.


tkinter은 GUI입니다.


파이썬은 3.6버젼입니다.


우선 결과를 보여드릴게요!


결과물입니다.


시간과 분을 다음과 같은 형식으로 입력한 후 알람 설정을 누르면 정해진 시간에 알람음이 울리게 됩니다.


[main.py]

# 알람음을 재생하기 위한

# wave와 pygame 헤더를 추가합니다.

import wave 

import pygame


# 현재 시간을 1초단위로 가져오기 위한 getCurrentTime 모듈

import getCurrentTime

import threading

# 그래픽 사용자 인터페이스(GUI)를 사용하기 위한 모듈

from tkinter import *

from tkinter import ttk



# 파일 경로 지정

file_path = 'I:/mp3/alarm.wav'

file_wav = wave.open(file_path)



# TK 클래스의 생성자 호출

window = Tk()

str_hour = StringVar()

str_minute = StringVar()

str_hour.set(0)

str_minute.set(0)



# pygame으로 노래를 재생하면 delay가 생깁니다.

# delay를 없애고 원래의 노래 재생 속도로 재생합니다.

frequency = file_wav.getframerate()

pygame.mixer.init(frequency=frequency)

pygame.mixer.music.load(file_path)


# 현재시간을 계속 가져옵니다.

getCurrentTime.TaskCurrentTime()


# alarmFlag = 0  ==> alarm종료상태

# alarmFlag = 1  ==> alarm설정상태

alarmFlag = 0


def alarm_On():

    # 알람음을 재생합니다.

    pygame.mixer.music.play()


def alarm_Off():

    # 알람음을 중지합니다.

    pygame.mixer.music.stop()


# 현재시간과 알람시간을 계속 비교합니다.

def CheckTime():

    global alarmFlag

    timer = threading.Timer(3,CheckTime)     

    timer.start()

     

    realTime_Hour = getCurrentTime.hour

    realTime_Minute = getCurrentTime.minute

    myHour = int(str_hour.get())

    myMinute = int(str_minute.get())


    if(realTime_Hour == myHour and realTime_Minute == myMinute and alarmFlag == 1):    

        timer.cancel()   

        print(alarmFlag)

        alarm_On()


    if(alarmFlag == 0):

        print("알람음 종료합니다.")

        alarm_Off()     

   

class MyAlarm:

    def __init__(self):

        pass

    def alarmSet(self):

        global alarmFlag

        alarmFlag = 1

        CheckTime()

        

    def alarmReset(self):

        global alarmFlag

        alarmFlag = 0

        CheckTime()

       

window.geometry("350x150+150+50")

    

myAlarm = MyAlarm()

la = Label(window, text="시간 입력 ex 오전 8시 ==> 8 , 오후8시 ==> 20")

la.grid(column = 0 , row = 0)

textbox = ttk.Entry(window,width=10,textvariable = str_hour)

textbox.grid(column = 1 , row = 0)

la = Label(window, text="분 입력 ex 8분 ==> 8 , 58분 ==> 58")

la.grid(column = 0 , row = 1)

textbox2 = ttk.Entry(window,width=10,textvariable = str_minute)

textbox2.grid(column = 1 , row = 1)

btn_On = Button(window, text="알람설정", command=myAlarm.alarmSet)

btn_On.place(x=100,y=100)    

btn_Off = Button(window, text="알람해제", command=myAlarm.alarmReset)

btn_Off.place(x=200,y=100)


window.mainloop()


[현재 시간을 가져옴.py]

import threading

from datetime import datetime


hour = ""

minute = ""


end = False

def TaskCurrentTime():

    now = datetime.now()

    global end

    global hour

    global minute

    if end:

        return

    

    timer = threading.Timer(1,TaskCurrentTime)

    timer.start()

    hour = now.hour

    minute = now.minute

    

    print("현재시간은 ", int(hour) , "시", int(minute), "분 입니다,")


우선 전체적인 코드입니다.


pygame을 추가하기 위해서는 pygame 라이브러리를 설치 하셔야합니다.


file_path = 'I:/mp3/alarm.wav'  여기에는 wav용 음악파일이 위치한 곳을 적어주시면 됩니다.


# pygame으로 노래를 재생하면 delay가 생깁니다.

# delay를 없애고 원래의 노래 재생 속도로 재생합니다.

frequency = file_wav.getframerate()

pygame.mixer.init(frequency=frequency)

pygame.mixer.music.load(file_path)


==> pygame을 이용해서 wav파일을 재생시키면 노래가 엄청 느리게 재생됩니다.

원래 속도로 재생하기 위해서 위와 같이 추가하시면 됩니다.


 timer = threading.Timer(1,TaskCurrentTime)     ==> 1초 단위로 TaskCurrentTime() 함수를 반복적으로 호출합니다.






Comments