Отрегулируйте время будильника, чтобы соответствовать времени часов в питоне - PullRequest
2 голосов
/ 09 сентября 2011

Я только изучаю Python, и в качестве одной из основных задач, которые мне предложили друзья, я работал над будильником. Я успешно сделал будильник, который воспроизводил звук .wav в заданное время. Теперь я использую Pygame для графического интерфейса, и все это прекрасно работало, пока мне не пришлось устанавливать кнопки для настройки времени будильника. Посмотрите, когда я сравниваю время будильника с временем на часах, время отображается в виде строки, поэтому время будильника также должно быть. Но кнопки не могут + или - из строки, поэтому я застрял. Я попробовал способы превратить его в строку, но пока все было довольно неудачно. Интересно, есть ли у кого-нибудь здесь предложение.

Вот код:

#!/usr/bin/python
import os.path, sys, datetime, time
import os, sys, math
import pygame, random
from pygame.locals import *

main_dir = os.path.split(os.path.abspath(__file__))[0]
data_dir = os.path.join(main_dir, 'data')
currenttime = datetime.datetime.now()
clocktime = currenttime.strftime("%H:%M")
alarmtime = "13:23"
pygame.init()

#Screen and background
width, height = 600, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Alarm Clock")
background = pygame.image.load(os.path.join(data_dir, 'diamondplate.jpg'))
background = pygame.transform.scale(background, (width, height))

#Current time
font = pygame.font.Font(None, 250)
text = font.render("%s" % clocktime, True, (255,140,0), (0,0,0))
textRect = text.get_rect()
textRect.centerx = screen.get_rect().centerx
textRect.centery = screen.get_rect().centery - 200

#Alarm time
text2 = font.render("%s" % '00:00', True, (255,140,0), (0,0,0))
text2Rect = text2.get_rect()
text2Rect.centerx = screen.get_rect().centerx
text2Rect.centery = screen.get_rect().centery + 200

#Alarm noise
def alarmsound(file_path=os.path.join(main_dir, 'data', 'boom.wav')):
    pygame.mixer.init(11025)
    sound = pygame.mixer.Sound(file_path)
    channel = sound.play()
    pygame.time.wait(1000)

#Image load function
def load_image(file):
    file = os.path.join(data_dir, file)
    surface = pygame.image.load(file)
    return surface.convert_alpha()

#Hour arrow up
class Hourup(pygame.sprite.Sprite):

    def __init__(self):
        pygame.sprite.Sprite.__init__(self,self.groups)
        image = load_image('arrowup.png')
        image = pygame.transform.scale(image, (85,85))
        self.image = image
        self.rect = self.image.get_rect()
        surface = pygame.display.get_surface()
        self.area = surface.get_rect()
        self.rect.bottomleft = text2Rect.topleft

    def click_check(self,eventpos):
        if self.rect.collidepoint(eventpos):
            pass

    def update(self):
        pass

#Hour arrow down
class Hourdown(pygame.sprite.Sprite):

    def __init__(self):
        pygame.sprite.Sprite.__init__(self,self.groups)
        image = load_image('arrowdown.png')
        image = pygame.transform.scale(image, (85,85))
        self.image = image
        self.rect = self.image.get_rect()
        surface = pygame.display.get_surface()
        self.area = surface.get_rect()
        self.rect.bottom = text2Rect.top
        self.rect.left = 159

    def click_check(self,eventpos):
        if self.rect.collidepoint(eventpos):
            pass    

    def update(self):
        pass

#Minute arrow up
class Minuteup(pygame.sprite.Sprite):

    def __init__(self):
        pygame.sprite.Sprite.__init__(self,self.groups)
        image = load_image('arrowup.png')
        image = pygame.transform.scale(image, (85,85))
        self.image = image
        self.rect = self.image.get_rect()
        surface = pygame.display.get_surface()
        self.area = surface.get_rect()
        self.rect.bottomright = (442,414)

    def click_check(self,eventpos):
        if self.rect.collidepoint(eventpos):
            pass

    def update(self):
        pass

#Minute arrow down
class Minutedown(pygame.sprite.Sprite):

    def __init__(self):
        pygame.sprite.Sprite.__init__(self,self.groups)
        image = load_image('arrowdown.png')
        image = pygame.transform.scale(image, (85,85))
        self.image = image
        self.rect = self.image.get_rect()
        surface = pygame.display.get_surface()
        self.area = surface.get_rect()
        self.rect.bottomright = text2Rect.topright

    def click_check(self,eventpos):
        if self.rect.collidepoint(eventpos):
            pass

    def update(self):
        pass


#Groups
allsprites = pygame.sprite.Group()
Hourup.groups = allsprites
Hourdown.groups = allsprites
Minutedown.groups = allsprites
Minuteup.groups = allsprites
hourup = Hourup()
hourdown = Hourdown()
minutedown = Minutedown()
minuteup = Minuteup()
clickableobjects = [hourup, hourdown, minutedown, minuteup]

def main():
    while 1:
        currenttime = datetime.datetime.now()
        clocktime = currenttime.strftime("%H:%M")
        screen.blit(background,(0,0))
        text = font.render("%s" % clocktime, True, (255,140,0), (0,0,0))
        text2 = font.render("%s" % alarmtime, True, (255,140,0), (0,0,0))
        screen.blit(text,textRect)
        screen.blit(text2,text2Rect)
        for event in pygame.event.get():
            if event.type == pygame.QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
                sys.exit()
            if event.type == MOUSEBUTTONDOWN:
                if event.button == 1:
                    for object in clickableobjects:
                        object.click_check(event.pos)

        if clocktime == alarmtime and soundcheck = False:
            alarmsound()
            soundcheck = True
        allsprites.draw(screen)
        allsprites.update()
        pygame.display.update()
        pygame.display.flip

if __name__ == '__main__':
    main()

1 Ответ

1 голос
/ 09 сентября 2011

Вы ищете strptime(), который преобразует строку в экземпляр даты и времени.

см. здесь , чтобы узнать, как правильно его использовать.

Сравнение двух значений даты и времениэкземпляры дадут вам экземпляр timedelta, который вы можете прочитать о здесь .По сути, это даст вам разницу между двумя значениями с точностью до миллисекунды.

Узнайте все, что вы можете о модулях даты, времени и календаря.Как только вы узнаете, что такое время и дата в python, становится действительно легко.

...