Форум сайта python.su
Здравствуйте!
Возникла сложность, как реализовать в Kivy визуальную фиксацию кнопок переключателей - стандартные кнопки работают, а вот круглые не фиксируют цвет. А меняют его только при нажатии или отпускании (с мотря как реализовать ( on_press или on_release)
Не могу понять, как надо реализовать код, что бы фиксировался цвет активной кнопки
#! /usr/bin/env python from kivy.app import App from kivy.uix.widget import Widget from kivy.uix.boxlayout import BoxLayout from kivy.uix.button import Button from kivy.uix.textinput import TextInput from kivy.uix.togglebutton import ToggleButton from kivy.properties import StringProperty from kivy.graphics import Rectangle, Color from kivy.base import runTouchApp from kivy.config import Config from kivy.lang import Builder Config.set('kivy', 'keyboard_mode', 'systemanddoc') Config.write() Builder.load_string(''' <RadioButton>: padding:10 spacing:50 orientation: 'vertical' size_hint: (1, 0.95) GridLayout: size_hint: (1, .15) cols: 2 size: root.size spacing:10 StrokeButton: id: togglebutton1 markup: True text: "Button 1" group: 'toggle button' state: root.savedstate()[0] on_press: root.switchstate1() on_press: self.back_color = (0.157,0.455,0.753,1.0) on_release: self.back_color = (1.0, 0.0, 1.0, 1.0) StrokeButton: id: togglebutton2 markup: True text: "Button 2" group: 'toggle button' state: root.savedstate()[1] on_press: root.switchstate2() on_press: self.back_color = (0.157,0.455,0.753,1.0) on_release: self.back_color = (1.0, 0.0, 1.0, 1.0) <StrokeButton@ToggleButton>: background_color: (1,1,1,0) #если закомментировать, то пропадает рамка и становится видна нижняя квадратная кнопка background_normal: '' back_color: (1,0,1,1) border_radius:18 color: self.back_color bold: True canvas.before: Color: rgba:self.back_color Line: rounded_rectangle: (self.pos[0],self.pos[1],self.size[0], self.size[1],self.border_radius) width: 1.2 ''') class RadioButton(BoxLayout): slabel1 = StringProperty() slabel2 = StringProperty() def savedstate(self): self.slabel1 = 'Button 1' self.slabel2 = 'Butoon 2' if self.ids.togglebutton1.state == 'down': print(" АКТИВНА 1") print(['down', 'normal']) return ['down', 'normal'] def switchstate1(self): self.ids.togglebutton1.state = 'down' self.back_color = (0.157,0.455,0.753,1.0) self.slabel1 = 'Button 1' self.slabel2 = 'Button 2' print("Активна кнопка 1") #self.back_color = (1.0, 0.0, 1.0, 1.0) def switchstate2(self): self.ids.togglebutton2.state = 'down' self.slabel1 = 'Button 2' self.slabel2 = 'Button 1' print("Активна кнопка 2") class RadioButtonApp(App): def build(self): return RadioButton() if __name__ == '__main__': RadioButtonApp().run()
Офлайн
from kivy.app import App from kivy.uix.widget import Widget from kivy.uix.boxlayout import BoxLayout from kivy.uix.button import Button from kivy.uix.textinput import TextInput from kivy.uix.togglebutton import ToggleButton from kivy.properties import StringProperty from kivy.graphics import Rectangle, Color from kivy.base import runTouchApp from kivy.config import Config from kivy.lang import Builder Config.set('kivy', 'keyboard_mode', 'systemanddoc') Config.write() Builder.load_string(''' <RadioButton>: padding:10 spacing:50 orientation: 'vertical' size_hint: (1, 0.95) GridLayout: size_hint: (1, .15) cols: 2 size: root.size spacing:10 StrokeButton: id: togglebutton1 markup: True text: "Button 1" group: 'toggle button' state: root.savedstate()[0] on_press: root.switchstate1(); self.back_color = (0.157,0.455,0.753,1.0); togglebutton2.back_color = (1.0, 0.0, 1.0, 1.0) #on_release: self.back_color = (1.0, 0.0, 1.0, 1.0) StrokeButton: id: togglebutton2 markup: True text: "Button 2" group: 'toggle button' state: root.savedstate()[1] on_press: root.switchstate2(); self.back_color = (0.157,0.455,0.753,1.0); togglebutton1.back_color = (1.0, 0.0, 1.0, 1.0) #on_release: self.back_color = (1.0, 0.0, 1.0, 1.0) <StrokeButton@ToggleButton>: background_color: (1,1,1,0) #если закомментировать, то пропадает рамка и становится видна нижняя квадратная кнопка background_normal: '' back_color: (1,0,1,1) border_radius:18 color: self.back_color bold: True canvas.before: Color: rgba:self.back_color Line: rounded_rectangle: (self.pos[0],self.pos[1],self.size[0], self.size[1],self.border_radius) width: 1.2 ''') class RadioButton(BoxLayout): slabel1 = StringProperty() slabel2 = StringProperty() def savedstate(self): self.slabel1 = 'Button 1' self.slabel2 = 'Butoon 2' if self.ids.togglebutton1.state == 'down': print(" АКТИВНА 1") print(['down', 'normal']) return ['down', 'normal'] def switchstate1(self): self.ids.togglebutton1.state = 'down' self.back_color = (0.157,0.455,0.753,1.0) self.slabel1 = 'Button 1' self.slabel2 = 'Button 2' print("Активна кнопка 1", self.ids.togglebutton1.state) #self.back_color = (1.0, 0.0, 1.0, 1.0) def switchstate2(self): self.ids.togglebutton2.state = 'down' self.slabel1 = 'Button 2' self.slabel2 = 'Button 1' print("Активна кнопка 2", self.ids.togglebutton2.state) class RadioButtonApp(App): def build(self): return RadioButton() if __name__ == '__main__': RadioButtonApp().run()
Отредактировано AD0DE412 (Авг. 23, 2020 20:22:50)
Офлайн
AD0DE412Спасибо, большое!!!
Офлайн