: orientation: 'horizontal' min: 1 step: 1 : padding: [5, ( self.height - self.line_height ) / 2] multiline: False : dice_slider: dice_slider dice_text: dice_text skill_slider: skill_slider skill_text: skill_text roll_button: roll_button result_label: result_label previous_results: previous_results BoxLayout: orientation: 'vertical' spacing: 10 BoxLayout: orientation: 'horizontal' spacing: 10 center_x: root.center_x width: root.width Label: text: "Dice" SlavedSlider: id: dice_slider max: root.max_dice value: root.dice_value on_value: root.slider_value_change(dice_slider) SlavedTextInput: id: dice_text text: str(root.dice_value) on_text: root.text_value_change(dice_text) BoxLayout: orientation: 'horizontal' spacing: 10 width: root.width Label: text: "Skill" SlavedSlider: id: skill_slider max: root.max_skill value: root.skill_value on_value: root.slider_value_change(skill_slider) SlavedTextInput: id: skill_text on_text: root.text_value_change(skill_text) text: str(root.skill_value) Button: id: roll_button text: "Roll" on_press: root.roll_dice() Label: id: result_label bold: True text: root.initial_result_label_text ListView: id: previous_results adapter: root.previous_results_la