diff --git a/simulators/ursina/ui_component.py b/simulators/ursina/ui_component.py index f08a5857a9cfa16cf2968a670e418be5b87f49f2..e72ed2a3db5658cac707028c01be65cb29f25cd9 100644 --- a/simulators/ursina/ui_component.py +++ b/simulators/ursina/ui_component.py @@ -7,7 +7,7 @@ # python_version :3.8 # ============================================================================== from ursina import Ursina, window, Entity, Grid, Mesh, camera, Text, application, color, mouse, Vec2, Vec3, \ - load_texture, held_keys, Button + load_texture, held_keys, Button, Tooltip from ursina.prefabs.first_person_controller import FirstPersonController from simulators.ursina.ursina_config import UrsinaConfig from simulators.ursina.ursina_event import UrsinaEvent @@ -36,14 +36,19 @@ class UiSlider(Slider): class SwithButton(ButtonGroup): - def __init__(self, options, default): + def __init__(self, options, default, tooltips=None): super().__init__(options, min_selection=1, y=0, default=default, - selected_color=color.green, ignore_paused=True, + selected_color=color.rgba(0.1, 0.6, 0.1, 1.0), ignore_paused=True, color=color.rgba(0.0, 0.0, 0.0, 0.5)) # self.label.scale = 0.8 # self.label.font = UrsinaConfig.CN_FONT - for button in self.buttons: + for i, button in enumerate(self.buttons): button.text_entity.font = UrsinaConfig.CN_FONT + if tooltips is not None: + if len(tooltips) > i: + tooltip = Tooltip(tooltips[i]) + tooltip.font = UrsinaConfig.CN_FONT + button.tooltip = tooltip class UiButton(Button): diff --git a/simulators/ursina/ursina_ui.py b/simulators/ursina/ursina_ui.py index 1f524f377e9e1abc88df5644705b7da06b59e6fd..d34a308ab21fa015ed8841f1cc6c7ef82fa9d7a5 100644 --- a/simulators/ursina/ursina_ui.py +++ b/simulators/ursina/ursina_ui.py @@ -13,15 +13,17 @@ from ursina.prefabs.first_person_controller import FirstPersonController from simulators.ursina.ui_component import UiSlider, SwithButton, UiButton from simulators.ursina.ursina_config import UrsinaConfig from simulators.ursina.ursina_event import UrsinaEvent -from ursina import WindowPanel, InputField, Button, Slider, ButtonGroup +from ursina import WindowPanel, InputField, Button, Slider, ButtonGroup, Panel class UrsinaUI: def ui_component_init(self): - self.start_button_text = "●" # 》●▲○◎ - self.pause_button_text = "〓" # 〓 || ‖ + self.start_button_text = "●" # 》●▲○◎ + self.pause_button_text = "〓" # 〓 || ‖ + self.no_trail_button_text = "○ " + self.trail_button_text = "○--" application.time_scale = 0.5 self.slider_body_spin_factor = UiSlider(text='自转速度', min=0.01, max=30, default=1) @@ -37,20 +39,27 @@ class UrsinaUI: self.slider_trail_length.on_value_changed = self.on_slider_trail_length_changed self.on_off_switch = SwithButton((self.pause_button_text, - self.start_button_text), default=self.start_button_text) + self.start_button_text), + default=self.start_button_text, + tooltips=('暂停', '运行')) self.on_off_switch.selected_color = color.red - self.on_off_trail = SwithButton((' ', '...'), default=' ') + self.on_off_trail = SwithButton((self.no_trail_button_text, self.trail_button_text), + default=self.no_trail_button_text, + tooltips=('天体运行无轨迹', '天体运行有拖尾轨迹')) self.on_off_trail.on_value_changed = self.on_off_trail_changed self.point_button = UiButton(text='寻找', on_click=self.on_point_button_click) self.reset_button = UiButton(text='重置', on_click=self.on_reset_button_click) - self.on_off_switch.on_value_changed = self.on_off_switch_changed + self.point_button.scale_x = -0.2 + self.reset_button.scale_x = 0.2 + + self.on_off_switch.on_value_changed = self.on_off_switch_changed wp = WindowPanel( title='', content=( - Text('方位控制: Q W E A S D + 鼠标右键',font='msyhl.ttc'), + Text('方位控制: Q W E A S D + 鼠标右键', font='msyhl.ttc'), # InputField(name='name_field'), # Button(text='Submit', color=color.azure), self.point_button, @@ -66,7 +75,7 @@ class UrsinaUI: ), ignore_paused=True, color=color.rgba(0.0, 0.0, 0.0, 0.5) ) wp.y = 0.5 # wp.panel.scale_y / 2 * wp.scale_y # center the window panel - wp.x = 0.6 # wp.scale_x + 0.1 + wp.x = 0.6 # wp.scale_x + 0.1 # wp.x = 0#wp.panel.scale_x / 2 * wp.scale_x self.wp = wp @@ -86,10 +95,8 @@ class UrsinaUI: # slider_text = Text(text='自转速度', scale=1, position=(-0.6, 0.3)) # slider = Slider(scale=0.5, position=(-0.6, 0), min=0, max=10, step=1, text=slider_text) - - def on_off_trail_changed(self): - if self.on_off_trail.value == "...": + if self.on_off_trail.value == self.trail_button_text: UrsinaConfig.show_trail = True else: UrsinaConfig.show_trail = False