🖥️ GUI-System
GUI-Überblick
Arcades GUI-System basiert auf UIManager und einer Vielzahl von Widgets. Es ist ereignisgesteuert und unterstützt Layouts, Styling und Controller-Input.
UIManager
Zentrale Verwaltungsklasse. Muss einmal pro View erstellt werden, verarbeitet alle Events.
Widgets
UIFlatButton, UILabel, UIInputText, UISlider, UICheckBox, UIDropdown und mehr.
Layouts
UIBoxLayout (horizontal/vertikal), UIGridLayout, UIAnchorLayout für flexible Anordnung.
Styling
Farben, Fonts, Border-Radius individuell pro Widget konfigurierbar.
| Widget | Beschreibung |
|---|---|
| UIFlatButton | Einfacher Klick-Button (empfohlen) |
| UITextureButton | Button mit benutzerdefinierter Textur |
| UILabel | Text-Anzeige |
| UIInputText | Texteingabe-Feld |
| UISlider | Schieberegler |
| UICheckBox | Checkbox / Toggle |
| UIDropdown | Auswahlmenü |
| UIScrollableLayout | Scrollbarer Bereich |
| UITextArea | Mehrzeiliges Text-Feld |
| UIProgressBar | Fortschrittsbalken (eigenes Widget) |
Arcade GUI Live-Vorschau – Klicke die Widgets
Simuliert echte Arcade UIManager-Widgets: Button, Label, Input, Slider, Checkbox
UIManager einrichten
PYTHON – UIManager Grundstruktur
import arcade
import arcade.gui
class MenuView(arcade.View):
def __init__(self):
super().__init__()
# UIManager erstellen (einmal pro View)
self.manager = arcade.gui.UIManager()
self.manager.enable()
# Hintergrundfarbe
arcade.set_background_color(arcade.color.DARK_BLUE_GRAY)
# GUI aufbauen
self.setup_ui()
def setup_ui(self):
# Vertikales Layout für Buttons
v_box = arcade.gui.UIBoxLayout()
# Start-Button
start_button = arcade.gui.UIFlatButton(
text="Spiel starten",
width=200
)
# Event-Handler registrieren
@start_button.event("on_click")
def on_click_start(event):
game_view = GameView()
game_view.setup()
self.window.show_view(game_view)
v_box.add(start_button.with_space_around(bottom=20))
# Optionen-Button
options_button = arcade.gui.UIFlatButton(text="Optionen", width=200)
v_box.add(options_button.with_space_around(bottom=20))
# Layout zentriert auf dem Bildschirm
self.manager.add(
arcade.gui.UIAnchorWidget(
anchor_x="center_x",
anchor_y="center_y",
child=v_box
)
)
def on_draw(self):
self.clear()
self.manager.draw()
def on_hide_view(self):
# Manager deaktivieren wenn View versteckt wird
self.manager.disable()
Widgets im Detail
PYTHON – UISlider
# Lautstärke-Slider
volume_slider = arcade.gui.UISlider(
value=50, # Startwert
min_value=0,
max_value=100,
width=200
)
@volume_slider.event()
def on_change(event):
new_volume = event.new_value / 100
self.music_player.volume = new_volume
print(f"Lautstärke: {event.new_value}%")
v_box.add(arcade.gui.UILabel(text="Lautstärke"))
v_box.add(volume_slider)
PYTHON – UIInputText
# Spielername eingeben
name_input = arcade.gui.UIInputText(
text="Spieler1",
width=200,
height=40
)
# Enter-Button daneben
confirm_btn = arcade.gui.UIFlatButton(text="OK", width=60)
@confirm_btn.event("on_click")
def on_confirm(event):
player_name = name_input.text
print(f"Name: {player_name}")
# Horizontal nebeneinander
h_box = arcade.gui.UIBoxLayout(vertical=False)
h_box.add(name_input)
h_box.add(confirm_btn.with_space_around(left=10))
PYTHON – UICheckBox
# Vollbild-Option
fullscreen_checkbox = arcade.gui.UICheckBox()
label = arcade.gui.UILabel(text="Vollbild")
@fullscreen_checkbox.event("on_change")
def toggle_fullscreen(event):
self.window.set_fullscreen(event.value)
# Label + Checkbox horizontal
row = arcade.gui.UIBoxLayout(vertical=False, space_between=10)
row.add(fullscreen_checkbox)
row.add(label)
PYTHON – UIDropdown
# Schwierigkeitsgrad wählen
difficulty_dropdown = arcade.gui.UIDropdown(
options=["Leicht", "Mittel", "Schwer", "Unmöglich"],
default="Mittel",
width=200
)
@difficulty_dropdown.event("on_change")
def on_difficulty_change(event):
difficulty = event.new_value
print(f"Schwierigkeit: {difficulty}")
Layouts
PYTHON – Layout-Typen
# 1. Vertikales Box-Layout (Standard)
v_box = arcade.gui.UIBoxLayout(
vertical=True, # Übereinander
space_between=10 # Abstand zwischen Elementen
)
# 2. Horizontales Box-Layout
h_box = arcade.gui.UIBoxLayout(
vertical=False, # Nebeneinander
space_between=5
)
# 3. Grid-Layout
grid = arcade.gui.UIGridLayout(
column_count=3,
row_count=2,
horizontal_spacing=10,
vertical_spacing=10
)
grid.add(button, column=0, row=0)
grid.add(label, column=1, row=0)
# 4. Anchor-Layout (für Positionierung)
anchor = arcade.gui.UIAnchorLayout()
anchor.add(child=button, anchor_x="right", anchor_y="bottom")
# In UIManager hinzufügen
self.manager.add(
arcade.gui.UIAnchorWidget(
anchor_x="center_x",
anchor_y="center_y",
child=v_box
)
)
GUI-Styling
PYTHON – Button Styling
# Benutzerdefinierter Button-Style
custom_style = {
"normal": {
"bg_color": (21, 19, 21),
"border_color": (0, 245, 255),
"border_width": 2,
"font_color": (0, 245, 255),
"font_size": 14,
},
"hover": {
"bg_color": (0, 245, 255),
"border_color": (0, 245, 255),
"font_color": (0, 0, 0),
},
"press": {
"bg_color": (0, 180, 200),
},
}
styled_button = arcade.gui.UIFlatButton(
text="STYLED BUTTON",
width=200,
style=custom_style
)