Прикреплённый файл «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 из ссылки «[получить]», так как он чисто внутренний и может измениться.Вам нельзя прикреплять файлы к этой странице.