組み込み技術を向上したい!!

でも組み込み以外にも手を出し始めました・・・

RaspberryPi2 + kivy ToggleButton... as RadioButton

先日RaspberryPi2でkivyを触ってみたので、その続き。

前回の内容は↓

sunnydays-k.hatenablog.com

 

ToggleButtonを使ってみる

kivyのButtonにはToggle機能を持ったものがあるらしい。ということで実際に使ってみた。

from kivy.base import runTouchApp

from kivy.app import App
from kivy.uix.button import Label, Button
from kivy.uix.togglebutton import ToggleButton
from kivy.config import Config
from kivy.uix.floatlayout import FloatLayout

from kivy.core.window import Window

Config.set('graphics', 'width', '200')
Config.set('graphics', 'height', '200')
class RootWidget(FloatLayout):
    def __init__(self, **kwargs):
        super(RootWidget, self).__init__(**kwargs)
        self.Sample1Btn = ToggleButton(text="Sample1", font_size = "18sp",group='hogehoge',
                state='down',size_hint=(.3, .15), pos_hint={'center_x': .2, 'center_y': .7})
        self.Sample1Btn.bind(on_press=self.Sample1Btncallback)
        self.add_widget(self.Sample1Btn)
        
        self.Sample2Btn = ToggleButton(text="Sample2",font_size="18sp",group='hogehoge',
                size_hint=(.3, .15), pos_hint={'center_x': .2, 'center_y': .5})
        self.Sample2Btn.bind(on_press=self.Sample2Btncallback)
        self.add_widget(self.Sample2Btn)
        
    def Sample1Btncallback(self,instance):
        if self.Sample1Btn.state != 'down':
          self.Sample1Btn.state='down'     
          
    def Sample2Btncallback(self,instance):
        if self.Sample2Btn.state != 'down':
          self.Sample2Btn.state='down'     
class TestApp(App):
    def build(self):
        self.root = root = RootWidget()
        self.title = 'Test Sample'
        return self.root
TestApp().run()

みたいな感じで実装してみた。

ToggleButtonはクリックして押された(down)状態、又は押されていない状態を保持するためのbuttonだと思うけど、group化することで、groupの内どれか一つしか押された(down)状態となれないようにできる。

しかし、group化するだけだと、down状態のbuttonをもう一度クリックするとgroup化されたbuttonの内、どれもdown状態でない状態となってしまう。何か気持ち悪いので、callbackを使って、down状態のときにクリックされても、down状態を維持するようにしてみた。

radioボタン的な使い方をしてみたわけ。こっちの方がしっくりきた。

次はSliderだな・・・。

追記

上記で作成したToggleButtonを押したまま指をスライドさせると、意図しないトグル動作をしてしまう。対策として、

ToggleButton(always_release=True)

のように、ToggleButtonのパラメータにalways_release=Trueを追加してやるといい。

sunnydays-k.hatenablog.com

sunnydays-k.hatenablog.com