题
所以基本上我有两个想要显示的独立屏幕。屏幕上一次显示 11 个窗格,一旦我单击名为键盘的窗格,它应该清除屏幕并设置 36 个窗格,这些窗格应显示键盘(出于测试目的,我只使用了三个窗格)。
我的问题是,一旦我单击键盘,它就会清除屏幕并显示 3 个测试窗格,它还如何显示来自第一页的其他 10 个窗格。
例子:可以从以下开始:
这不太好。(A、B 和 C 应该显示,但其余的不应该显示):
这是代码:
import pygame
import sys
white = (255,255,255)
black = (0,0,0)
objs = []
MAIN_BUTTON = 2
KEYBOARD = True
WORDS = False
class Pane():
def __init__(self, textToDisplay, coordinates, screen):
self.textToDisplay = textToDisplay
self.coordinates = coordinates
self.screen = screen
self.font = pygame.font.SysFont('Palace Script MT', 25)
Screen = pygame.display.set_mode((1366,768), 0, 32)
self.screen = Screen
self.screen.fill((white))
def coordinates(self):
return self.coordinates
def text(self):
return self.textToDisplay
def drawPane(self):
textCoords = self.coordinates
self.screen.blit(self.font.render(self.textToDisplay, True, (black)), textCoords)
pygame.draw.rect(self.screen, (black), self.coordinates, 2)
pygame.display.update()
class Screen():
NoOfPanes = 0
Panes = []
paneLocs = [(583, 334, 300, 150),
(633, 150, 200, 125),
(633, 600, 200, 125),
(350, 360, 200, 100),
(925, 360, 200, 100),
(1000, 150, 150, 100),
(275, 150, 150, 100),
(275, 600, 150, 100),
(1000, 600, 150, 100),
(75, 350, 200, 100),
(0, 668, 200, 100)
]
keyboardPaneLocs = [(0, 100, 100, 100),
(0, 200, 100, 100),
(0, 300, 100, 100),
(0, 400, 100, 100)
]
def __init__(self):
pygame.init()
pygame.display.set_caption('Box Test')
self.font = pygame.font.SysFont('Arial', 25)
Screen = pygame.display.set_mode((1366,768), 0, 32)
self.screen = Screen
self.screen.fill((white))
pygame.display.update()
def addPane(self, textToDisplay, keyboardFlag):
if (not keyboardFlag) and (self.NoOfPanes > 11):
print("Limit Reached")
else:
print(int(self.NoOfPanes))
if keyboardFlag:
newPane = Pane(textToDisplay, self.keyboardPaneLocs[self.NoOfPanes], Screen)
else:
newPane = Pane(textToDisplay, self.paneLocs[self.NoOfPanes], Screen)
self.Panes.append(newPane)
self.NoOfPanes = self.NoOfPanes + 1
pygame.display.update()
def drawPanes(self):
for Pane in self.Panes:
Pane.drawPane()
def mousePosition(self):
global clickPos
global releasePos
for event in pygame.event.get():
if event.type == MAIN_BUTTON:
self.Pos = pygame.mouse.get_pos()
return MAIN_BUTTON
else:
return False
def mouseDown(self, posx, posy):
textToReturn = "Nothing selected"
for Pane in self.Panes:
paneCoords = Pane.coordinates
print(str(paneCoords[0]) + ":" + str(paneCoords[1]) + ":" + str(paneCoords[2]) + ":" + str(paneCoords[3]))
if (paneCoords[0] <= posx <= paneCoords[0]+paneCoords[2]) and (paneCoords[1] <= posy <= paneCoords[1]+paneCoords[3]):
textToReturn = Pane.text()
return textToReturn
def displayKeyboard(self):
self.addPane("A", KEYBOARD)
self.addPane("B", KEYBOARD)
self.addPane("C", KEYBOARD)
def clearScreen(self):
Screen = pygame.display.set_mode((1366,768), 0, 32)
self.screen = Screen
self.screen.fill((white))
if __name__ == '__main__':
myScreen = Screen()
myScreen.addPane("1", WORDS)
myScreen.addPane("2", WORDS)
myScreen.addPane("3", WORDS)
myScreen.addPane("4", WORDS)
myScreen.addPane("5", WORDS)
myScreen.addPane("6", WORDS)
myScreen.addPane("7", WORDS)
myScreen.addPane("8", WORDS)
myScreen.addPane("9", WORDS)
myScreen.addPane("10", WORDS)
myScreen.addPane("Keyboard", WORDS)
myScreen.drawPanes()
while True:
ev = pygame.event.get()
for event in ev:
if event.type == pygame.MOUSEBUTTONUP:
posx,posy = pygame.mouse.get_pos()
textSelected = myScreen.mouseDown(posx, posy)
print(textSelected)
if textSelected == "Keyboard":
myScreen = Screen()
myScreen.clearScreen()
myScreen.displayKeyboard()
myScreen.drawPanes()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit(); sys.exit();
我认为我面临的问题是所有这些窗格都被添加到列表中 Panes = []
. 。在通过使用该功能显示新窗格之前,如何确保该列表清晰 def drawPanes(self):
不要相信我的话,因为这只是一个假设,我确实陷入了困境。(感谢任何帮助。)
解决方案
您可以将空列表分配给窗格以使其为空
Panes = []
但您将永远失去所有添加的窗格。
也许您应该为键盘窗格创建单独的列表,然后仅绘制此列表。
编辑:
顺便一提:
您使用一个变量 myScreen
到两个屏幕 - 当您跑步时 myScreen = Screen(...)
您创建了新屏幕,但失去了对上一屏幕的访问权限。
使用 Screen = pygame.display.set_mode((1366,768), 0, 32); self.screen = Screen
清除屏幕是浪费时间和记忆。你只需要 self.screen.fill((white))
你用 Screen
name 作为类名和某些函数中的变量。您可能会意外地发生名称冲突。
编辑:
完整的工作示例代码如下所示:
我用一个 self.screen
所以窗口不会每次都创建/删除。
您可以按“ESC”键显示/隐藏键盘。
import pygame
import sys
#----------------------------------------------------------------------
WHITE = (255,255,255)
BLACK = (0 ,0 ,0 )
#---------------------------
MAIN_BUTTON = 2
KEYBOARD = True
WORDS = False
#----------------------------------------------------------------------
class Pane():
def __init__(self, textToDisplay, coordinates, screen):
self.textToDisplay = textToDisplay
self.coordinates = coordinates
self.screen = screen
self.font = pygame.font.SysFont('Palace Script MT', 25)
#---------------------------
def coordinates(self):
return self.coordinates
#---------------------------
def text(self):
return self.textToDisplay
#---------------------------
def drawPane(self):
textCoords = self.coordinates
self.screen.blit(self.font.render(self.textToDisplay, True, BLACK), textCoords)
pygame.draw.rect(self.screen, BLACK, self.coordinates, 2)
#----------------------------------------------------------------------
class Application():
NoOfPanes = 0
NoOfKeys = 0
Panes = []
Keys = []
paneLocs = [(583, 334, 300, 150),
(633, 150, 200, 125),
(633, 600, 200, 125),
(350, 360, 200, 100),
(925, 360, 200, 100),
(1000, 150, 150, 100),
(275, 150, 150, 100),
(275, 600, 150, 100),
(1000, 600, 150, 100),
(75, 350, 200, 100),
(0, 668, 200, 100)
]
keyboardPaneLocs = [(0, 100, 100, 100),
(0, 200, 100, 100),
(0, 300, 100, 100),
(0, 400, 100, 100)
]
#---------------------------
def __init__(self):
pygame.init()
pygame.display.set_caption('Box Test')
self.font = pygame.font.SysFont('Arial', 25)
self.screen = pygame.display.set_mode((1366,768), 0, 32)
self.show_panes = True
self.show_keyboard = False
self.createPanes()
self.createKeyboard()
#---------------------------
def close(self):
print "pygame quit"
pygame.quit()
sys.exit()
#---------------------------
def createPanes(self):
self.addPane("1", WORDS)
self.addPane("2", WORDS)
self.addPane("3", WORDS)
self.addPane("4", WORDS)
self.addPane("5", WORDS)
self.addPane("6", WORDS)
self.addPane("7", WORDS)
self.addPane("8", WORDS)
self.addPane("9", WORDS)
self.addPane("10", WORDS)
self.addPane("Keyboard", WORDS)
#---------------------------
def createKeyboard(self):
self.addPane("A", KEYBOARD)
self.addPane("B", KEYBOARD)
self.addPane("C", KEYBOARD)
#---------------------------
def addPane(self, textToDisplay, keyboardFlag):
if (not keyboardFlag) and (self.NoOfPanes > 11):
print("Limit Reached")
else:
print(int(self.NoOfPanes))
if keyboardFlag:
self.Keys.append(Pane(textToDisplay, self.keyboardPaneLocs[self.NoOfKeys], self.screen))
self.NoOfKeys += 1
else:
self.Panes.append(Pane(textToDisplay, self.paneLocs[self.NoOfPanes], self.screen))
self.NoOfPanes += 1
#---------------------------
def drawPanes(self):
for Pane in self.Panes:
Pane.drawPane()
#---------------------------
def drawKeyboard(self):
for Key in self.Keys:
Key.drawPane()
#---------------------------
def mousePosition(self, event):
if event.type == MAIN_BUTTON:
self.Pos = pygame.mouse.get_pos()
return MAIN_BUTTON
else:
return False
#---------------------------
def mouseDown(self):
posx,posy = pygame.mouse.get_pos()
textToReturn = "Nothing selected"
if self.show_panes:
for Pane in self.Panes:
paneCoords = Pane.coordinates
print(str(paneCoords[0]) + ":" + str(paneCoords[1]) + ":" + str(paneCoords[2]) + ":" + str(paneCoords[3]))
if (paneCoords[0] <= posx <= paneCoords[0]+paneCoords[2]) and (paneCoords[1] <= posy <= paneCoords[1]+paneCoords[3]):
textToReturn = Pane.text()
elif self.show_keyboard:
for Pane in self.Keys:
paneCoords = Pane.coordinates
print(str(paneCoords[0]) + ":" + str(paneCoords[1]) + ":" + str(paneCoords[2]) + ":" + str(paneCoords[3]))
if (paneCoords[0] <= posx <= paneCoords[0]+paneCoords[2]) and (paneCoords[1] <= posy <= paneCoords[1]+paneCoords[3]):
textToReturn = Pane.text()
return textToReturn
#---------------------------
def run(self):
clock = pygame.time.Clock()
RUNNING = True
while RUNNING:
# --- events ---
for event in pygame.event.get():
if event.type == pygame.QUIT:
RUNNING = False
break
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
self.show_keyboard = not self.show_keyboard
self.show_panes = not self.show_panes
if event.type == pygame.MOUSEBUTTONUP:
textSelected = self.mouseDown()
print(textSelected)
if textSelected == "Keyboard":
self.show_keyboard = True
self.show_panes = False
# --- draws ---
self.screen.fill(WHITE)
if self.show_panes:
self.drawPanes()
if self.show_keyboard:
self.drawKeyboard()
pygame.display.update()
# --- FPS ---
clock.tick(25)
self.close()
#----------------------------------------------------------------------
Application().run()
编辑:
- 类键盘
- Pane有一个event_handler
- 鼠标悬停时进行窗格测试
- 鼠标悬停时窗格更改背景(黄色)
- 按下鼠标时窗格更改背景(红色)
- 单击屏幕上的 Q 键关闭键盘
- 当点击 Q 键时,键盘将自己的事件发送到主循环 - 通知键盘已关闭
.
import pygame
import sys
#----------------------------------------------------------------------
WHITE = (255,255,255)
BLACK = (0 ,0 ,0 )
#---------------------------
MAIN_BUTTON = 2
KEYBOARD = True
WORDS = False
#----------------------------------------------------------------------
class Pane():
def __init__(self, textToDisplay, rect, screen, fgColor=(0,0,0), bgColor=(255,255,255), mouseoverBgColor=(255,255,0) ):
self.textToDisplay = textToDisplay
self.rect = pygame.Rect(*rect)
self.screen = screen
# colors
self.fgColor = fgColor
self.bgColor = bgColor
self.mouseoverBgColor = mouseoverBgColor
self.currentFgColor = self.fgColor
self.currentBgColor = self.bgColor
self.font = pygame.font.SysFont('Palace Script MT', 25)
#---------------------------
def coordinates(self):
return self.rect
#---------------------------
def text(self):
return self.textToDisplay
#---------------------------
def draw(self):
# background
self.screen.fill(self.currentBgColor, self.rect)
# border
pygame.draw.rect(self.screen, self.currentFgColor, self.rect, 2)
# text
self.screen.blit(self.font.render(self.textToDisplay, True, self.currentFgColor), self.rect)
#---------------------------
def test_coordinates(self, posx, posy):
return self.rect.collidepoint(posx, posy)
#---------------------------
def event_handler(self, event):
# standard pane color
self.currentFgColor = self.fgColor
self.currentBgColor = self.bgColor
# if mouse over pane change color
if event.type == pygame.MOUSEMOTION:
if self.rect.collidepoint(event.pos):
self.currentBgColor = self.mouseoverBgColor
elif event.type == pygame.MOUSEBUTTONDOWN:
if self.rect.collidepoint(event.pos):
self.currentBgColor = (255,0,0)
elif event.type == pygame.MOUSEBUTTONUP:
if self.rect.collidepoint(event.pos):
self.currentBgColor = self.mouseoverBgColor
#----------------------------------------------------------------------
class Keyboard():
Keys = []
paneLocs = []
visible = False
#---------------------------
def __init__(self, screen):
self.screen = screen
self.font = pygame.font.SysFont('Arial', 25)
self.create()
#---------------------------
def create(self):
letter_code = ord("A")
for y in range(2):
for x in range(13):
lock = (100*x, 100*y, 100, 100)
self.paneLocs.append(lock)
self.Keys.append(Pane(chr(letter_code), lock, self.screen, (0,0,0), (0,255,0)))
letter_code += 1
#---------------------------
def draw(self):
for key in self.Keys:
key.draw()
#---------------------------
def event_handler(self, event):
textToReturn = None
# let panes handle event
for key in self.Keys:
key.event_handler(event)
if event.type == pygame.MOUSEBUTTONUP:
posx, posy = event.pos
for key in self.Keys:
#print "debug: keyboard.event_handler", posx, posy
if key.test_coordinates(posx, posy):
textToReturn = key.text()
print textToReturn
# if Q was
if textToReturn == 'Q':
self.onKeyQ(textToReturn)
return textToReturn
#---------------------------
def onKeyQ(self, text):
# hide keyboard
self.visible = False
# send event to inform main loop that keyboard was closed
pygame.event.post(pygame.event.Event(pygame.USEREVENT, {'code': 666, 'key':text}))
#----------------------------------------------------------------------
class Application():
NoOfPanes = 0
Panes = []
paneLocs = [(583, 334, 300, 150),
(633, 150, 200, 125),
(633, 600, 200, 125),
(350, 360, 200, 100),
(925, 360, 200, 100),
(1000, 150, 150, 100),
(275, 150, 150, 100),
(275, 600, 150, 100),
(1000, 600, 150, 100),
(75, 350, 200, 100),
(0, 668, 200, 100)
]
#---------------------------
def __init__(self):
pygame.init()
pygame.display.set_caption('Box Test')
self.font = pygame.font.SysFont('Arial', 25)
self.screen = pygame.display.set_mode((1366,768), 0, 32)
self.show_panes = True
self.createPanes()
self.keyboard = Keyboard(self.screen)
#---------------------------
def close(self):
print "pygame quit"
pygame.quit()
sys.exit()
#---------------------------
def createPanes(self):
self.addPane("1", WORDS)
self.addPane("2", WORDS)
self.addPane("3", WORDS)
self.addPane("4", WORDS)
self.addPane("5", WORDS)
self.addPane("6", WORDS)
self.addPane("7", WORDS)
self.addPane("8", WORDS)
self.addPane("9", WORDS)
self.addPane("10", WORDS)
self.addPane("Keyboard", WORDS)
#---------------------------
def addPane(self, textToDisplay, keyboardFlag):
if (not keyboardFlag) and (self.NoOfPanes > 11):
print("Limit Reached")
else:
print(int(self.NoOfPanes))
if not keyboardFlag:
self.Panes.append(Pane(textToDisplay, self.paneLocs[self.NoOfPanes], self.screen))
self.NoOfPanes += 1
#---------------------------
def drawPanes(self):
for Pane in self.Panes:
Pane.draw()
#---------------------------
def mousePosition(self, event):
if event.type == MAIN_BUTTON:
self.Pos = event.pos
return MAIN_BUTTON
else:
return False
#---------------------------
def event_handler(self, event):
textToReturn = None
# let panes handle events
for pane in self.Panes:
pane.event_handler(event)
if event.type == pygame.MOUSEBUTTONUP:
posx, posy = event.pos
for pane in self.Panes:
#print "debug: app.event_handler", posx, posy
if pane.test_coordinates(posx, posy):
textToReturn = pane.text()
if textToReturn == "Keyboard":
self.keyboard.visible = True
self.show_panes = False
print textToReturn
return textToReturn
#---------------------------
def run(self):
clock = pygame.time.Clock()
RUNNING = True
while RUNNING:
# --- events ---
for event in pygame.event.get():
if event.type == pygame.QUIT:
RUNNING = False
break
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
self.keyboard.visible = not self.keyboard.visible
self.show_panes = not self.show_panes
if event.type == pygame.USEREVENT:
print "USEREVENT:", event.code
# event from keyboard
if event.code == 666:
# keyboar was closed so I have to show panes
self.show_panes = True
if self.show_panes:
self.event_handler(event)
if self.keyboard.visible:
self.keyboard.event_handler(event)
# --- draws ---
self.screen.fill(WHITE)
if self.show_panes:
self.drawPanes()
if self.keyboard.visible:
self.keyboard.draw()
pygame.display.update()
# --- FPS ---
clock.tick(25)
self.close()
#----------------------------------------------------------------------
Application().run()
编辑:
现在可以单击并移动窗格。我在这里只放了 Pane 类
寻找: is_movable
和 is_moving
class Pane():
def __init__(self, textToDisplay, rect, screen, fgColor=(0,0,0), bgColor=(255,255,255), mouseoverBgColor=(255,255,0) ):
self.textToDisplay = textToDisplay
self.rect = pygame.Rect(*rect)
self.screen = screen
# colors
self.fgColor = fgColor
self.bgColor = bgColor
self.mouseoverBgColor = mouseoverBgColor
self.currentFgColor = self.fgColor
self.currentBgColor = self.bgColor
self.font = pygame.font.SysFont('Palace Script MT', 25)
self.is_movable = True
self.is_moving = False
#---------------------------
def coordinates(self):
return self.rect
#---------------------------
def text(self):
return self.textToDisplay
#---------------------------
def draw(self):
# background
self.screen.fill(self.currentBgColor, self.rect)
# border
pygame.draw.rect(self.screen, self.currentFgColor, self.rect, 2)
# text
self.screen.blit(self.font.render(self.textToDisplay, True, self.currentFgColor), self.rect)
#---------------------------
def test_coordinates(self, posx, posy):
return self.rect.collidepoint(posx, posy)
#---------------------------
def event_handler(self, event):
# standard pane color
self.currentFgColor = self.fgColor
self.currentBgColor = self.bgColor
# if mouse over pane change color
if event.type == pygame.MOUSEMOTION:
if self.rect.collidepoint(event.pos):
self.currentBgColor = self.mouseoverBgColor
if self.is_movable and self.is_moving:
self.rect.move_ip(event.rel)
self.currentBgColor = (0,0,255)
elif event.type == pygame.MOUSEBUTTONDOWN:
if self.rect.collidepoint(event.pos):
self.currentBgColor = (255,0,0)
self.is_moving = True
elif event.type == pygame.MOUSEBUTTONUP:
if self.rect.collidepoint(event.pos):
self.currentBgColor = self.mouseoverBgColor
self.is_moving = False
编辑:
单击的窗格成为屏幕上最顶层的窗格:
import pygame
import sys
#----------------------------------------------------------------------
WHITE = (255,255,255)
BLACK = (0 ,0 ,0 )
#---------------------------
MAIN_BUTTON = 2
KEYBOARD = True
WORDS = False
#----------------------------------------------------------------------
class evt_type(): # UserEvent - types
PANE = pygame.USEREVENT + 1
KEYBOARD = pygame.USEREVENT + 2
class evt_code(): # UserEvent - codes
KEYBOARD_CLOSED = 100
PANE_CLICKED = 200
#----------------------------------------------------------------------
class Pane():
def __init__(self, textToDisplay, rect, screen, fgColor=(0,0,0), bgColor=(255,255,255), mouseoverBgColor=(255,255,0) ):
self.textToDisplay = textToDisplay
self.rect = pygame.Rect(*rect)
self.screen = screen
# colors
self.fgColor = fgColor
self.bgColor = bgColor
self.mouseoverBgColor = mouseoverBgColor
self.currentFgColor = self.fgColor
self.currentBgColor = self.bgColor
self.font = pygame.font.SysFont('Palace Script MT', 25)
self.is_movable = True
self.is_moving = False
#---------------------------
def coordinates(self):
return self.rect
#---------------------------
def text(self):
return self.textToDisplay
#---------------------------
def draw(self):
# background
self.screen.fill(self.currentBgColor, self.rect)
# border
pygame.draw.rect(self.screen, self.currentFgColor, self.rect, 2)
# text
self.screen.blit(self.font.render(self.textToDisplay, True, self.currentFgColor), self.rect)
#---------------------------
def test_coordinates(self, posx, posy):
return self.rect.collidepoint(posx, posy)
#---------------------------
def event_handler(self, event):
# standard pane color
self.currentFgColor = self.fgColor
self.currentBgColor = self.bgColor
# if mouse over pane change color
if event.type == pygame.MOUSEMOTION:
if self.rect.collidepoint(event.pos):
self.currentBgColor = self.mouseoverBgColor
if self.is_movable and self.is_moving:
self.rect.move_ip(event.rel)
self.currentBgColor = (0,0,255)
elif event.type == pygame.MOUSEBUTTONDOWN:
if self.rect.collidepoint(event.pos):
if self.is_movable:
pygame.event.post(pygame.event.Event(evt_type.PANE, {'code': evt_code.PANE_CLICKED, 'widget': self}))
self.currentBgColor = (255,0,0)
self.is_moving = True
elif event.type == pygame.MOUSEBUTTONUP:
if self.rect.collidepoint(event.pos):
self.currentBgColor = self.mouseoverBgColor
self.is_moving = False
#----------------------------------------------------------------------
class Keyboard():
Keys = []
paneLocs = []
visible = False
#---------------------------
def __init__(self, screen):
self.screen = screen
self.font = pygame.font.SysFont('Arial', 25)
self.create()
#---------------------------
def create(self):
letter_code = ord("A")
for y in range(2):
for x in range(13):
lock = (100*x, 100*y, 100, 100)
self.paneLocs.append(lock)
self.Keys.append(Pane(chr(letter_code), lock, self.screen, (0,0,0), (0,255,0)))
self.Keys[-1].is_movable = False
letter_code += 1
#---------------------------
def draw(self):
for key in self.Keys:
key.draw()
#---------------------------
def event_handler(self, event):
textToReturn = None
# let panes handle event
for key in self.Keys:
key.event_handler(event)
if event.type == pygame.MOUSEBUTTONUP:
posx, posy = event.pos
for key in self.Keys:
#print "debug: keyboard.event_handler", posx, posy
if key.test_coordinates(posx, posy):
textToReturn = key.text()
print textToReturn
# if Q was
if textToReturn == 'Q':
self.onKeyQ(textToReturn)
return textToReturn
#---------------------------
def onKeyQ(self, text):
# hide keyboard
self.visible = False
# send event to inform main loop that keyboard was closed
pygame.event.post(pygame.event.Event(evt_type.KEYBOARD, {'code': evt_code.KEYBOARD_CLOSED, 'key':text}))
#----------------------------------------------------------------------
class Application():
NoOfPanes = 0
Panes = []
paneLocs = [(583, 334, 300, 150),
(633, 150, 200, 125),
(633, 600, 200, 125),
(350, 360, 200, 100),
(925, 360, 200, 100),
(1000, 150, 150, 100),
(275, 150, 150, 100),
(275, 600, 150, 100),
(1000, 600, 150, 100),
(75, 350, 200, 100),
(0, 668, 200, 100)
]
#---------------------------
def __init__(self):
pygame.init()
pygame.display.set_caption('Box Test')
self.font = pygame.font.SysFont('Arial', 25)
self.screen = pygame.display.set_mode((1366,768), 0, 32)
self.show_panes = True
self.createPanes()
self.keyboard = Keyboard(self.screen)
#---------------------------
def close(self):
print "pygame quit"
pygame.quit()
sys.exit()
#---------------------------
def createPanes(self):
self.addPane("1", WORDS)
self.addPane("2", WORDS)
self.addPane("3", WORDS)
self.addPane("4", WORDS)
self.addPane("5", WORDS)
self.addPane("6", WORDS)
self.addPane("7", WORDS)
self.addPane("8", WORDS)
self.addPane("9", WORDS)
self.addPane("10", WORDS)
self.addPane("Keyboard", WORDS)
#---------------------------
def addPane(self, textToDisplay, keyboardFlag):
if (not keyboardFlag) and (self.NoOfPanes > 11):
print("Limit Reached")
else:
print(int(self.NoOfPanes))
if not keyboardFlag:
self.Panes.append(Pane(textToDisplay, self.paneLocs[self.NoOfPanes], self.screen))
self.NoOfPanes += 1
#---------------------------
def drawPanes(self):
for Pane in self.Panes:
Pane.draw()
#---------------------------
def mousePosition(self, event):
if event.type == MAIN_BUTTON:
self.Pos = event.pos
return MAIN_BUTTON
else:
return False
#---------------------------
def event_handler(self, event):
textToReturn = None
# let panes handle events
for pane in self.Panes:
pane.event_handler(event)
if event.type == pygame.MOUSEBUTTONUP:
posx, posy = event.pos
for pane in self.Panes:
#print "debug: app.event_handler", posx, posy
if pane.test_coordinates(posx, posy):
textToReturn = pane.text()
if textToReturn == "Keyboard":
self.keyboard.visible = True
self.show_panes = False
print textToReturn
return textToReturn
#---------------------------
def run(self):
clock = pygame.time.Clock()
RUNNING = True
while RUNNING:
# --- events ---
for event in pygame.event.get():
if event.type == pygame.QUIT:
RUNNING = False
break
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
self.keyboard.visible = not self.keyboard.visible
self.show_panes = not self.show_panes
if event.type == evt_type.KEYBOARD:
print "USEREVENT:: TYPE:", event.type, "CODE:", event.code
# event from keyboard
if event.code == evt_code.KEYBOARD_CLOSED:
# keyboar was closed so I have to show panes
self.show_panes = True
if event.type == evt_type.PANE:
print "USEREVENT:: TYPE:", event.type, "CODE:", event.code
if event.code == evt_code.PANE_CLICKED:
# move to the end - move to top of screen
index = self.Panes.index(event.widget)
self.Panes.append(self.Panes.pop(index))
if self.show_panes:
self.event_handler(event)
if self.keyboard.visible:
self.keyboard.event_handler(event)
# --- draws ---
self.screen.fill(WHITE)
if self.show_panes:
self.drawPanes()
if self.keyboard.visible:
self.keyboard.draw()
pygame.display.update()
# --- FPS ---
clock.tick(25)
self.close()
#----------------------------------------------------------------------
Application().run()