MENU_03.py完整列表#
menu_03.py#
1"""
2Menu.
3
4Shows the usage of almost every gui widget, switching views and making a modal.
5"""
6import arcade
7import arcade.gui
8
9# Screen title and size
10SCREEN_WIDTH = 800
11SCREEN_HEIGHT = 600
12SCREEN_TITLE = "Making a Menu"
13
14
15class MainView(arcade.View):
16 """This is the class where your normal game would go."""
17
18 def __init__(self):
19 super().__init__()
20
21 self.manager = arcade.gui.UIManager()
22
23 switch_menu_button = arcade.gui.UIFlatButton(text="Pause", width=150)
24
25 # Initialise the button with an on_click event.
26 @switch_menu_button.event("on_click")
27 def on_click_switch_button(event):
28 # Passing the main view into menu view as an argument.
29 menu_view = MenuView(self)
30 self.window.show_view(menu_view)
31
32 # Use the anchor to position the button on the screen.
33 self.anchor = self.manager.add(arcade.gui.UIAnchorLayout())
34
35 self.anchor.add(
36 anchor_x="center_x",
37 anchor_y="center_y",
38 child=switch_menu_button,
39 )
40
41 def on_hide_view(self):
42 # Disable the UIManager when the view is hidden.
43 self.manager.disable()
44
45 def on_show_view(self):
46 """ This is run once when we switch to this view """
47 arcade.set_background_color(arcade.color.DARK_BLUE_GRAY)
48
49 # Enable the UIManager when the view is showm.
50 self.manager.enable()
51
52 def on_draw(self):
53 """ Render the screen. """
54 # Clear the screen
55 self.clear()
56
57 # Draw the manager.
58 self.manager.draw()
59
60
61class MenuView(arcade.View):
62 """Main menu view class."""
63
64 def __init__(self, main_view):
65 super().__init__()
66
67 self.manager = arcade.gui.UIManager()
68
69 resume = arcade.gui.UIFlatButton(text="Resume", width=150)
70 start_new_game = arcade.gui.UIFlatButton(text="Start New Game", width=150)
71 volume = arcade.gui.UIFlatButton(text="Volume", width=150)
72 options = arcade.gui.UIFlatButton(text="Options", width=150)
73
74 exit = arcade.gui.UIFlatButton(text="Exit", width=320)
75
76 # Initialise a grid in which widgets can be arranged.
77 self.grid = arcade.gui.UIGridLayout(column_count=2, row_count=3, horizontal_spacing=20, vertical_spacing=20)
78
79 # Adding the buttons to the layout.
80 self.grid.add(resume, col_num=0, row_num=0)
81 self.grid.add(start_new_game, col_num=1, row_num=0)
82 self.grid.add(volume, col_num=0, row_num=1)
83 self.grid.add(options, col_num=1, row_num=1)
84 self.grid.add(exit, col_num=0, row_num=2, col_span=2)
85
86 self.anchor = self.manager.add(arcade.gui.UIAnchorLayout())
87
88 self.anchor.add(
89 anchor_x="center_x",
90 anchor_y="center_y",
91 child=self.grid,
92 )
93
94 self.main_view = main_view
95
96 def on_hide_view(self):
97 # Disable the UIManager when the view is hidden.
98 self.manager.disable()
99
100 def on_show_view(self):
101 """ This is run once when we switch to this view """
102
103 # Makes the background darker
104 arcade.set_background_color([rgb - 50 for rgb in arcade.color.DARK_BLUE_GRAY])
105
106 # Enable the UIManager when the view is showm.
107 self.manager.enable()
108
109 def on_draw(self):
110 """ Render the screen. """
111 # Clear the screen
112 self.clear()
113 self.manager.draw()
114
115
116def main():
117 window = arcade.Window(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE, resizable=True)
118 main_view = MainView()
119 window.show_view(main_view)
120 arcade.run()
121
122
123if __name__ == "__main__":
124 main()