Найти - Пользователи
Полная версия: Вопрос по круглым кнопкам переключателям (ToggleButton) в Kivy
Начало » Python для новичков » Вопрос по круглым кнопкам переключателям (ToggleButton) в Kivy
1
dune10991
Здравствуйте!
Возникла сложность, как реализовать в 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()
AD0DE412
 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()
костыль хотя вроде как в документации написано мол если одна кнопка в группе нажата должно само работать
dune10991
AD0DE412
Спасибо, большое!!!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB