Computer Science/Database

# 4 | PyQt에 알람 기능 추가하고 줌에 접속하도록 하기

토마토. 2022. 1. 27. 20:27

알고리즘

간단함

현재 시간을 관리하는 모듈(getCurrentTime)을 불러오고, 

DB에 저장된 시간 / 요일과 일치하(거나 5분 전)이 되면, 

음악 소리를 울리면서, 과목에 대한 정보를 알려주는 팝업창을 띄우면 된다. 

계속 실행시키는 함수를 만들자 (+백그라운드 실행 필요함)

 

step 1. 현재 시간을 알아내는 법

import time, datetime

tm = time.localtime(time.time())
print("year:", tm.tm_year)
print("month:", tm.tm_mon)
print("day:", tm.tm_mday)
print("hour:", tm.tm_hour)
print("minute:", tm.tm_min)
print("second:", tm.tm_sec)

def get_today_days():
    days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    return days[datetime.datetime.today().weekday()]

print(get_today_days())

# 시간 분까지 일치하면 굿 :ㅇ

 

step 2. 시간 비교해서 알람 울리고, 줌에 접속하기

import os
import sys
import time
import threading
import datetime
import json
import webbrowser

# 시각 구하기
dy_lis = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]

xc = datetime.datetime.now()
t = time.localtime()
yr = str(t.tm_year) # 년
mo = str(t.tm_mon) # 월
dt = str(t.tm_mday) # 일
dy = dy_lis[t.tm_wday]

now_time = time.strftime("%H:%M", t)

# 알람 울릴 시간 구하기
full_next_time = '20221280913'
full_next_time = datetime.datetime.strptime(full_next_time, "%Y%m%d%H%M")
print(mo)
print(now_time)
print(full_next_time)

min_left = full_next_time - xc
min_left = min_left.seconds/60
print(min_left)

# 수업 접속하기
subject = '인터뷰'
professor = '토마토'
id = ''
pw = ''
url = 'zoommtg://zoom.us/join?confno={}&pwd={}'.format(id, pw)

# 수업에 접속하기
if 0 <= min_left <= 5:
    webbrowser.open(url)
    
elif 10 <= min_left < 11:
    pass
else:
    pass

 

step 3. pyqt와 연결하기

pyqt 메인 클래스 내부 함수를 생성한다. 

 

    def check_alarm(self):
        # 현재 시각을 구한다. 
        dy_lis = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]

        xc = datetime.datetime.now()
        t = time.localtime()
        yr = str(t.tm_year) # 년
        mo = str(t.tm_mon) # 월
        if len(mo) == 1:
            mo = '0' + mo
        dt = str(t.tm_mday) # 일
        dy = dy_lis[t.tm_wday]
        print(yr, mo, dt, dy)
        # 알람 울릴 다음 시간과 줌 접속 정보를 가져온다. 
        today_alarm_list = []
        now_time = time.strftime("%H:%M", t)
        now_time = datetime.datetime.strptime(now_time, "%H:%M")

        for row in self.db.cursor.execute('SELECT * FROM zoomlist ORDER BY DAYLIST'):
            if dy == row[0]: # 같은 요일만 추출함
                print(row[0])
                alarm_time = yr + mo + dt + row[1]
                alarm_time = datetime.datetime.strptime(alarm_time, "%Y%m%d%H:%M")
                today_alarm_list.append([row, alarm_time])

        # 그 중에서 현재 시각과 가장 가깝고 * 아직 지나지 않은 시간을 찾아낸다. 
        next_time = [[],[]]
        for i, j in today_alarm_list:
            if now_time <= j:
                next_time[0].append(j)
                next_time[1].append(i)
        next_time_index = next_time[0].index(min(next_time[0]))
        print(next_time[1][next_time_index])
        
        subject = next_time[1][next_time_index][2]
        zoomid = next_time[1][next_time_index][3]
        zoompw = next_time[1][next_time_index][4]
        sound = next_time[1][next_time_index][4]
        
        # 수업에 접속한다. 
        url = 'zoommtg://zoom.us/join?confno={}&pwd={}'.format(zoomid, zoompw)
        min_left = 0

        print(subject, zoomid, zoompw, sound)
        
        # 수업에 접속하기
        if 0 <= min_left <= 5:
            webbrowser.open(url)
            if sound == 1:
                #playsound('sounds/alarm.wav', block=False)
                pass
            else:
                pass
            msg = QMessageBox()
            msg.setWindowTitle('수업 시작합니다')
            msg.setText('')
            msg.setStandardButtons(QMessageBox.Ok)
            result = msg.exec_()
            if result == QMessageBox.Ok:
                pass
            
        elif 10 <= min_left < 11:
            pass
        else:
            pass

 

 

 

 


참고자료

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

Alarm_clock | Just an Alarm Clock is written in PyQt5. (openweaver.com)