Прикреплённый файл «pyginput.py»

Загрузка

   1 #!/usr/bin/python
   2 # vim: sw=4:et:ts=4
   3 import pygame, sys
   4 pygame.init()
   5 pygame.font.init()
   6 font = pygame.font.Font(None, 32)
   7 
   8 class MWindow:
   9     def __init__(self, screen, rect):
  10         self.settle(screen, rect)
  11 
  12     def settle(self, screen, rect):
  13         self.rect=rect
  14         self.area=screen.subsurface(rect)   # part of parent surface
  15         self.backing=self.area.copy()       # old copy
  16         self.surface=self.area.copy()       # working surface
  17 
  18     def show(self):
  19         return self.area.blit(self.surface, (0,0))
  20 
  21     def hide(self):
  22         return self.area.blit(self.backing, (0,0))
  23 
  24     def redraw(self):
  25         pass
  26 
  27     def action(self, event):
  28         self.show()
  29 
  30 class Input(MWindow):
  31 
  32     def __init__(self, screen, rect, default=u"", fg=(225,255,200), bg=(0,0,0)):
  33         MWindow.__init__(self, screen, rect)
  34         self.text=default
  35         self.done=False
  36         self.fg, self.bg = fg, bg
  37         self.cur = len(self.text)
  38         self.__keyevent = None
  39 
  40     def redraw(self):
  41         self.surface.fill(self.bg)
  42         pygame.draw.rect(self.surface, (255,255,255), self.surface.get_rect().inflate(-1,-1), 1)
  43         txt=font.render(self.text, 1, self.fg)
  44         tx=font.render(self.text[:self.cur], 1, self.fg)
  45         cy=(self.surface.get_height()-txt.get_height())/2
  46         pygame.draw.line(self.surface,(255,255,0),(tx.get_width()+1,cy),\
  47                                                   (tx.get_width()+1,cy+txt.get_height()))        
  48         #return txt.blit(self.surface,(1,cy))
  49         return self.surface.blit(txt,(1,cy))
  50 
  51     def action(self, event):
  52         if event.type in [pygame.KEYDOWN, pygame.USEREVENT+1]:
  53             if event.type == pygame.KEYDOWN:
  54                 pygame.time.set_timer(pygame.USEREVENT+1, 0)
  55                 pygame.time.set_timer(pygame.USEREVENT, 1000)
  56                 self.__keyevent = event
  57                 print >> sys.stderr, "%%",event
  58             else:
  59                 event = self.__keyevent
  60                 print >> sys.stderr, "//",event
  61             if event.unicode and event.unicode in u'\n\r':
  62                 self.done = True
  63             elif event.key == 8:
  64                 self.text=self.text[:self.cur-1]+self.text[self.cur:]
  65                 self.cur -=1
  66             elif event.key == 276:
  67                 self.cur = max(0, self.cur - 1)
  68             elif event.key == 275:
  69                 self.cur = min(len(self.text), self.cur + 1)
  70             elif event.unicode and event.key >= 32 and event.key not in [ 127 ]:
  71                 self.text = self.text[:self.cur] + event.unicode + self.text[self.cur:]
  72                 self.cur+=1
  73             else:
  74                 print >> sys.stderr, event
  75         elif event.type == pygame.KEYUP:
  76             pygame.time.set_timer(pygame.USEREVENT, 0)
  77             pygame.time.set_timer(pygame.USEREVENT+1, 0)
  78         elif event.type == pygame.USEREVENT:
  79             print >> sys.stderr, "USEREVENT"
  80             pygame.time.set_timer(pygame.USEREVENT, 0)
  81             pygame.time.set_timer(pygame.USEREVENT+1, 30)
  82 
  83 screen = pygame.display.set_mode((800,600))
  84 inp, in_str = None, u""
  85 
  86 while True:
  87     event = pygame.event.wait()
  88     if   event.type == pygame.QUIT: sys.exit()
  89     if inp:
  90         inp.action(event)
  91         if inp.done:
  92             inp.hide()
  93             inp_str = inp.text
  94             inp = None
  95         else:
  96             inp.redraw()
  97             inp.show()
  98     else:
  99         if event.type == pygame.MOUSEBUTTONDOWN:
 100             pos=event.pos
 101             inp = Input(screen, (pos, (600,40)))
 102     pygame.display.flip()

Прикреплённые файлы

Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.

Вам нельзя прикреплять файлы к этой странице.