在mousedown操作后5秒后隐藏部分

时间:2016-11-21 12:30:37

标签: python pygame

我是python的新手。我用vb2010编程,但现在是时候尝试新的东西。我希望在鼠标按下事件后5秒后隐藏动作(如在start()中)。

import pygame
import sys
from pygame.locals import *
from time import gmtime, strftime
import threading
import time
white = (255,255,255)
black = (0,0,0)
blue = (0,0,255)
width = 600
height = 400
channel = '0001'
name = 'Channel 3'
class screen(object):
    def __init__(self):
        pygame.init()
        self.font = pygame.font.SysFont('Arial', 25)
        pygame.display.set_caption('PyTV')
        self.screen = pygame.display.set_mode((width,height), 0, 32)
        self.screen.fill((black))
        pygame.display.update()

    def printData(self):
        self.rect = pygame.draw.rect(self.screen, (blue), (0, 0, width, height - 350), 0)
        self.screen.blit(self.font.render(channel, True, white), (width - 590, 0))
        self.screen.blit(self.font.render(name, True, white), (height - 335, 0))
        self.screen.blit(self.font.render(strftime("%H:%M %d/%m/%Y", gmtime()), True, white), (width - 590, height - 377))
        pygame.display.update()

    def clean(self):
        self.screen.fill((black))
        pygame.display.update()


if __name__ == '__main__':
    def start():
        Pan3.printData()
        time.sleep(5)
        Pan3.clean()
    Pan3 = screen()
    threading.Thread(target=start).start()
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit(); sys.exit();
            if event.type == pygame.MOUSEBUTTONDOWN:
                print 'Event! Mouse Down! Code here....'

2 个答案:

答案 0 :(得分:1)

考虑到您也使用线程,timer可能符合您的需求。

编辑:满足您对如何使其工作的更详细解释的需求,这里有一些伪代码。

if event.type == pygame.MOUSEBUTTONDOWN:
    if active_timer:
        timer.cancel()
    timer = Timer(5.0, show_info_things)
    timer.start()

我希望这能让你顺利进行。

答案 1 :(得分:0)

当您第一次点击left mouse时,它会显示日期,当您第二次点击时,它会隐藏日期。如果您没有第二次点击,则会在5秒后自动隐藏。

与密钥SPACE相同 - 首先按显示,第二次隐藏。如果你不按第二次,它会在5秒后自动隐藏。

ESCright click也会隐藏。

import pygame
import sys
import time

# --- constants --- (UPPER_CASE names)

WHITE = (255,255,255)
BLACK = (  0,  0,  0)
BLUE  = (  0,  0,255)

WIDTH  = 600
HEIGHT = 400

# --- classes --- (CamelCase names)

class Screen(object):

    def __init__(self):
        pygame.init()

        self.screen = pygame.display.set_mode((WIDTH, HEIGHT), 0, 32)

        pygame.display.set_caption('PyTV')

        self.font = pygame.font.SysFont('Arial', 25)

        self.channel = '0001'
        self.name = 'Channel 3'

        self.show_data = None
        self.current_time = pygame.time.get_ticks()


    def draw_data(self):
        self.rect = pygame.draw.rect(self.screen, BLUE, (0, 0, WIDTH, HEIGHT-350), 0)
        self.screen.blit(self.font.render(self.channel, True, WHITE), (WIDTH-590, 0))
        self.screen.blit(self.font.render(self.name, True, WHITE), (HEIGHT-335, 0))
        self.screen.blit(self.font.render(time.strftime("%H:%M:%S %d/%m/%Y", time.gmtime()), True, WHITE), (WIDTH-590, HEIGHT-377))


    def events(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                return False
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    self.show_data = None
                elif event.key == pygame.K_SPACE:
                    if self.show_data:
                        self.show_data = None
                    else:
                        self.show_data = self.current_time + 5000

            if event.type == pygame.MOUSEBUTTONDOWN:
                if event.button == 1:
                    if self.show_data:
                        self.show_data = None
                    else:
                        self.show_data = self.current_time + 5000
                elif event.button == 3:
                    # hide on right click
                    self.show_data = None

    def update(self):

        # if displayed
        if self.show_data:
            # check time
            if self.current_time >= self.show_data:
                # hide after time
                self.show_data = None


    def draw(self):

        self.screen.fill(BLACK)

        if self.show_data:
            self.draw_data()

        pygame.display.update()


    def run(self): # mainloop

        while True:

            self.current_time = pygame.time.get_ticks()

            if self.events() is False:
                break

            self.update()

            self.draw()

        #sys.exit()

# --- fucntions --- (lower_case names)

# empty

# --- main ---

if __name__ == '__main__':

    Screen().run()