Maison  >  Article  >  développement back-end  >  Comment créer un programme de réveil simple en utilisant Python et Tkinter ?

Comment créer un programme de réveil simple en utilisant Python et Tkinter ?

WBOY
WBOYavant
2023-04-21 11:28:081145parcourir

Cet article utilise principalement la bibliothèque Tkinter de Python pour créer un programme de réveil simple, qui peut émettre un son pour vous rappeler l'heure spécifiée. L'interface de ce programme est relativement simple, avec une seule étiquette, trois menus d'options et un bouton. L'utilisateur peut régler l'heure de l'alarme via le menu d'options, puis cliquer sur le bouton pour démarrer la synchronisation. Lorsque l'heure de l'alarme est atteinte, l'heure de l'alarme est atteinte. le programme jouera un son pour rappeler à l'utilisateur.

Maintenant, expliquons le rôle de chaque bloc de code un par un.

from tkinter import *
import datetime
import time
import winsound
from threading import *

Tout d'abord, nous avons importé la bibliothèque tkinter, la bibliothèque datetime, la bibliothèque time, la bibliothèque winsound et la bibliothèque threading.

root = Tk()
root.geometry("400x200")

Créez une fenêtre nommée root et définissez la taille de la fenêtre sur 400x200.

def Threading():
    t1=Thread(target=alarm)
    t1.start()

Définissez une fonction Threading() qui créera un nouveau thread nommé t1 dont le but est d'exécuter la fonction alarm() et de démarrer le thread.

def alarm():
    while True:
        set_alarm_time = f"{hour.get()}:{minute.get()}:{second.get()}"
        time.sleep(1)
        current_time = datetime.datetime.now().strftime("%H:%M:%S")
        print(current_time,set_alarm_time)
        if current_time == set_alarm_time:
            print("Time to Wake up")
            winsound.PlaySound("sound.wav",winsound.SND_ASYNC)

Cette fonction alarm() est exécutée dans un thread séparé, qui vérifie chaque seconde si l'heure actuelle est égale à l'heure définie. Si l'heure actuelle et l'heure définie sont égales, winsound.PlaySound() sera appelé pour lire un fichier musical pour indiquer que l'heure est écoulée.

Au début de la fonction, récupérez d'abord les heures, minutes et secondes définies par l'utilisateur sur l'interface via hour.get(), minute.get() et second.get(), puis combinez-les en une chaîne set_alarm_time. Ensuite, utilisez time.sleep() pour faire dormir le thread pendant 1 seconde, de sorte que toutes les 1 secondes, il vérifie si l'heure actuelle est égale à l'heure définie.

Ensuite, obtenez l'heure actuelle via datetime.datetime.now().strftime("%H:%M:%S") et formatez-la dans la chaîne current_time avec les heures, les minutes et les secondes. Enfin, si current_time est égal à set_alarm_time, un message est imprimé et winsound.PlaySound() est appelé pour lire un fichier musical.

Label(root,text="Alarm Clock",font=("Helvetica 20 bold"),fg="red").pack(pady=10)
Label(root,text="Set Time",font=("Helvetica 15 bold")).pack()

frame = Frame(root)
frame.pack()

hour = StringVar(root)
hours = ('00', '01', '02', '03', '04', '05', '06', '07',
		'08', '09', '10', '11', '12', '13', '14', '15',
		'16', '17', '18', '19', '20', '21', '22', '23', '24'
		)
hour.set(hours[0])

hrs = OptionMenu(frame, hour, *hours)
hrs.pack(side=LEFT)

minute = StringVar(root)
minutes = ('00', '01', '02', '03', '04', '05', '06', '07',
		'08', '09', '10', '11', '12', '13', '14', '15',
		'16', '17', '18', '19', '20', '21', '22', '23',
		'24', '25', '26', '27', '28', '29', '30', '31',
		'32', '33', '34', '35', '36', '37', '38', '39',
		'40', '41', '42', '43', '44', '45', '46', '47',
		'48', '49', '50', '51', '52', '53', '54', '55',
		'56', '57', '58', '59', '60')
minute.set(minutes[0])

mins = OptionMenu(frame, minute, *minutes)
mins.pack(side=LEFT)

second = StringVar(root)
seconds = ('00', '01', '02', '03', '04', '05', '06', '07',
		'08', '09', '10', '11', '12', '13', '14', '15',
		'16', '17', '18', '19', '20', '21', '22', '23',
		'24', '25', '26', '27', '28', '29', '30', '31',
		'32', '33', '34', '35', '36', '37', '38', '39',
		'40', '41', '42', '43', '44', '45', '46', '47',
		'48', '49', '50', '51', '52', '53', '54', '55',
		'56', '57', '58', '59', '60')
second.set(seconds[0])

secs = OptionMenu(frame, second, *seconds)
secs.pack(side=LEFT)

Button(root,text="Set Alarm",font=("Helvetica 15"),command=Threading).pack(pady=20)

Ce code est utilisé pour ajouter des étiquettes, des cadres, des boutons et des menus d'options. Tout d’abord, un cadre est créé, puis trois variables de type StringVar heure, minute et seconde sont créées pour stocker les heures, minutes et secondes sélectionnées par l’utilisateur. Ensuite, trois tuples d'heures, de minutes et de secondes sont définis pour stocker respectivement les chaînes numériques de 00 à 60. Les nombres 0 à 9 sont précédés de zéros pour garantir un format cohérent. Utilisez ensuite OptionMenu pour créer trois menus d'options permettant de sélectionner les heures, les minutes et les secondes.

Pour résumer, cet article fournit une application de réveil de base qui peut être configurée et lancée via l'interface GUI. Lorsque l'heure de l'alarme arrive, l'application émettra un son pour le rappeler à l'utilisateur.

Ci-joint le code source complet :

# 导入所需库
from tkinter import *
import datetime
import time
import winsound
from threading import *

# 创建对象
root = Tk()

# 设置几何体
root.geometry("400x200")

# 使用线程
def Threading():
	t1=Thread(target=alarm)
	t1.start()

def alarm():
	# 无限循环
	while True:
		# 设置警报
		set_alarm_time = f"{hour.get()}:{minute.get()}:{second.get()}"

		# 等待一秒钟
		time.sleep(1)

		# 获取当前时间
		current_time = datetime.datetime.now().strftime("%H:%M:%S")
		print(current_time,set_alarm_time)

		# 检查设置的报警是否等于当前时间
		if current_time == set_alarm_time:
			print("Time to Wake up")
			# 播放声音
			winsound.PlaySound("sound.wav",winsound.SND_ASYNC)

# 添加标签、框架、按钮、选项菜单
Label(root,text="Alarm Clock",font=("Helvetica 20 bold"),fg="red").pack(pady=10)
Label(root,text="Set Time",font=("Helvetica 15 bold")).pack()

frame = Frame(root)
frame.pack()

hour = StringVar(root)
hours = ('00', '01', '02', '03', '04', '05', '06', '07',
		'08', '09', '10', '11', '12', '13', '14', '15',
		'16', '17', '18', '19', '20', '21', '22', '23', '24'
		)
hour.set(hours[0])

hrs = OptionMenu(frame, hour, *hours)
hrs.pack(side=LEFT)

minute = StringVar(root)
minutes = ('00', '01', '02', '03', '04', '05', '06', '07',
		'08', '09', '10', '11', '12', '13', '14', '15',
		'16', '17', '18', '19', '20', '21', '22', '23',
		'24', '25', '26', '27', '28', '29', '30', '31',
		'32', '33', '34', '35', '36', '37', '38', '39',
		'40', '41', '42', '43', '44', '45', '46', '47',
		'48', '49', '50', '51', '52', '53', '54', '55',
		'56', '57', '58', '59', '60')
minute.set(minutes[0])

mins = OptionMenu(frame, minute, *minutes)
mins.pack(side=LEFT)

second = StringVar(root)
seconds = ('00', '01', '02', '03', '04', '05', '06', '07',
		'08', '09', '10', '11', '12', '13', '14', '15',
		'16', '17', '18', '19', '20', '21', '22', '23',
		'24', '25', '26', '27', '28', '29', '30', '31',
		'32', '33', '34', '35', '36', '37', '38', '39',
		'40', '41', '42', '43', '44', '45', '46', '47',
		'48', '49', '50', '51', '52', '53', '54', '55',
		'56', '57', '58', '59', '60')
second.set(seconds[0])

secs = OptionMenu(frame, second, *seconds)
secs.pack(side=LEFT)

Button(root,text="Set Alarm",font=("Helvetica 15"),command=Threading).pack(pady=20)

# 执行Tkinter	
root.mainloop()

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer