¿por qué es mi código que todavía muestra el antiguo cristales?
Pregunta
Así que, básicamente tengo dos pantallas separadas que me desea que se muestre.Uno de los que cuenta con 11 Paneles se muestran en la pantalla al mismo tiempo y una vez que haga clic en un Panel denominado teclado se debe borrar la pantalla y configurar 36 Paneles que debe mostrar un teclado (para propósitos de la prueba sólo se utilizan tres paneles).
Mi problema es que una vez que haga clic en teclado no borrar la pantalla y la 3 prueba de paneles de cómo también mostrar mi otro 10 paneles que vienen desde la primera página.
Ejemplo: Esto está bien para empezar:
Esto no está bien.(A, B Y C debe ser visible, pero el resto no):
Aquí está el código:
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();
Creo que el problema que estoy enfrentando es que todos estos paneles están siendo añadidos a la lista Panes = []
.¿Cómo puedo asegurarme de que esta lista es claro antes de mostrar los nuevos paneles a través de la utilización de la función def drawPanes(self):
No tome mi palabra para ella, ya que es sólo una suposición y yo soy así y realmente atrapado.(Cualquier ayuda es muy apreciada.)
Solución
Usted puede abertura de la lista vacía a Panel de hacer vacío
Panes = []
pero se perdieron todos los paneles para siempre.
Tal vez debería hacer separados lista para teclado paneles y que sólo dibujar esta lista.
EDITAR:
Por el camino:
Utiliza una variable myScreen
para ambas pantallas - al ejecutar myScreen = Screen(...)
crear nueva pantalla, pero perdería el acceso a la pantalla anterior.
El uso de Screen = pygame.display.set_mode((1366,768), 0, 32); self.screen = Screen
para borrar la pantalla es desperdicio de tiempo y los recuerdos.Usted sólo necesita self.screen.fill((white))
Utiliza Screen
nombre como nombre de la clase y como variable en algunas funciones.Usted puede tener accidentalmente conflicto de nombres.
EDITAR:
Trabajo completo de ejemplo de cómo el código podría parecerse a:
Yo uso uno self.screen
así que la ventana no se ha creado/eliminados cada vez.
Usted puede presionar la tecla "ESC" para mostrar/ocultar el teclado.
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()
EDITAR:
- Clase De Teclado
- Panel tiene una event_handler
- Panel de prueba si el ratón está sobre
- Panel de cambio de fondo cuando el ratón está sobre (amarillo)
- Panel de cambio de fondo cuando el ratón está presionado (rojo)
- pulsando la tecla Q en la pantalla para cerrar el teclado
- teclado enviar propio evento para mainloop cuando la tecla Q se haga clic en informar de que el teclado está cerrado
.
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()
EDITAR:
Ahora el Panel se puede hacer clic y mover.Pongo aquí solo Panel de la clase
Buscar: is_movable
y 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
EDITAR:
Hizo clic en Panel de convertirse en parte superior del Panel en la pantalla:
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()