Module albow.core.ui.Shell
Source code
from pygame.event import Event
from pygame import Surface
from albow.core.ui.RootWidget import RootWidget
class Shell(RootWidget):
"""
The Shell class is an abstract class to use as a base for the outer shell of a game. It provides facilities
for switching between a number of screens, such as menus, pages of instructions or the game itself. Screens
are normally subclasses of the Screen widget.
"""
def __init__(self, surface: Surface, **kwds):
"""
Initializes the Shell with the given surface as its root surface (normally this will be the PyGame
screen surface).
Args:
surface: A pygame surface
**kwds:
"""
#
# Python 3 update
#
super().__init__(surface, **kwds)
self.current_screen = None
def show_screen(self, new_screen):
"""
Hides the previous screen, if any, and shows the given widget as the new screen. The widget is displayed
centered within the shell.
The leave_screen() method of the previous screen is called before hiding it, and the enter_screen() method
of the new screen is called after showing it.
TODO fix screen imports shell & shell imports screen
Args:
new_screen: The new screen to display
"""
old_screen = self.current_screen
if old_screen is not new_screen:
if old_screen:
old_screen.leave_screen()
self.remove(old_screen)
self.add(new_screen)
self.current_screen = new_screen
if new_screen:
new_screen.focus()
new_screen.enter_screen()
self.invalidate()
def timer_event(self, event: Event):
"""
Calls the timer_event() method of the current screen, if any, and returns its result.
Args:
event: An event
Returns: The result
"""
screen = self.current_screen
if screen:
return screen.timer_event(event)
def begin_frame(self):
"""
Deprecated, use timer_event() instead.
"""
screen = self.current_screen
if screen:
screen.begin_frame()
def relative_mode(self):
"""
A Shell runs in relative input mode if the current screen does.
"""
screen = self.current_screen
return screen and screen.relative_mode()
Classes
class Shell (surface, **kwds)
-
The Shell class is an abstract class to use as a base for the outer shell of a game. It provides facilities for switching between a number of screens, such as menus, pages of instructions or the game itself. Screens are normally subclasses of the Screen widget.
Initializes the Shell with the given surface as its root surface (normally this will be the PyGame screen surface).
Args
surface
- A pygame surface
**kwds:
Source code
class Shell(RootWidget): """ The Shell class is an abstract class to use as a base for the outer shell of a game. It provides facilities for switching between a number of screens, such as menus, pages of instructions or the game itself. Screens are normally subclasses of the Screen widget. """ def __init__(self, surface: Surface, **kwds): """ Initializes the Shell with the given surface as its root surface (normally this will be the PyGame screen surface). Args: surface: A pygame surface **kwds: """ # # Python 3 update # super().__init__(surface, **kwds) self.current_screen = None def show_screen(self, new_screen): """ Hides the previous screen, if any, and shows the given widget as the new screen. The widget is displayed centered within the shell. The leave_screen() method of the previous screen is called before hiding it, and the enter_screen() method of the new screen is called after showing it. TODO fix screen imports shell & shell imports screen Args: new_screen: The new screen to display """ old_screen = self.current_screen if old_screen is not new_screen: if old_screen: old_screen.leave_screen() self.remove(old_screen) self.add(new_screen) self.current_screen = new_screen if new_screen: new_screen.focus() new_screen.enter_screen() self.invalidate() def timer_event(self, event: Event): """ Calls the timer_event() method of the current screen, if any, and returns its result. Args: event: An event Returns: The result """ screen = self.current_screen if screen: return screen.timer_event(event) def begin_frame(self): """ Deprecated, use timer_event() instead. """ screen = self.current_screen if screen: screen.begin_frame() def relative_mode(self): """ A Shell runs in relative input mode if the current screen does. """ screen = self.current_screen return screen and screen.relative_mode()
Ancestors
Subclasses
- albow.demo.GridDebugShell.GridDebugShell
- albow.demo.AlbowDemoShell.AlbowDemoShell
- albow.demo.DemoShell.DemoShell
Methods
def relative_mode(self)
-
A Shell runs in relative input mode if the current screen does.
Source code
def relative_mode(self): """ A Shell runs in relative input mode if the current screen does. """ screen = self.current_screen return screen and screen.relative_mode()
def show_screen(self, new_screen)
-
Hides the previous screen, if any, and shows the given widget as the new screen. The widget is displayed centered within the shell.
The leave_screen() method of the previous screen is called before hiding it, and the enter_screen() method of the new screen is called after showing it.
TODO fix screen imports shell & shell imports screen
Args
new_screen
- The new screen to display
Source code
def show_screen(self, new_screen): """ Hides the previous screen, if any, and shows the given widget as the new screen. The widget is displayed centered within the shell. The leave_screen() method of the previous screen is called before hiding it, and the enter_screen() method of the new screen is called after showing it. TODO fix screen imports shell & shell imports screen Args: new_screen: The new screen to display """ old_screen = self.current_screen if old_screen is not new_screen: if old_screen: old_screen.leave_screen() self.remove(old_screen) self.add(new_screen) self.current_screen = new_screen if new_screen: new_screen.focus() new_screen.enter_screen() self.invalidate()
def timer_event(self, event)
-
Calls the timer_event() method of the current screen, if any, and returns its result.
Args
event
- An event
Returns
:The
result
Source code
def timer_event(self, event: Event): """ Calls the timer_event() method of the current screen, if any, and returns its result. Args: event: An event Returns: The result """ screen = self.current_screen if screen: return screen.timer_event(event)
Inherited members
RootWidget
:add
add_anchor
add_centered
anchor
attention_lost
augment_mouse_event
begin_frame
bg_color
bg_image
border_color
border_width
call_handler
call_parent_handler
clicked_widget
confirm_quit
defer_drawing
dismiss
draw
draw_over
fg_color
focus
focus_switch
font
getRoot
get_cursor
get_focus
get_margin_rect
get_root
get_top_widget
get_visible
global_to_local
has_focus
inherited
invalidate
is_gl_container
key_down
key_up
local_to_global
margin
menu_bar
ourTimerEvent
parent
parent_resized
present
quit
rect
remove
remove_anchor
resized
root_widget
run
run_modal
scale_bg
sel_color
set_parent
set_size_for_text
set_timer
tab_stop
top_widget
visible