mardi 28 février 2017

Kivy: how to print instance id

I have this code and I would like to print the instance id once a checkbox is checked. I tried instance.id and self.ids.instance.ids but without success. Simply printing the instance gives me the kivy name (like <kivy.uix.checkbox.CheckBox object at 0x0000000005969660>). I use python 3.6 and Kivy 1.9.2.dev0.

import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.core.window import Window

class SampBoxLayout(BoxLayout):

    # For radio buttons
    blue = ObjectProperty(True)
    red = ObjectProperty(False)

    def checkbox_color(self, instance, value):
        if value is True:
            print("Is checked", instance.id)  # How to print the instance ID (I also tried  self.ids.instance.ids)
        else:
            print("Is not checked")

class SimpleApp(App):
    def build(self):
        Window.clearcolor = (1, 1, 1, 1)
        return SampBoxLayout()

sample_app = SimpleApp()
sample_app.run()

The .kv:

#: import CheckBox kivy.uix.checkbox


<SampBoxLayout>
    orientation: "vertical"
    padding: 10
    spacing: 10
    BoxLayout:
        orientation: "horizontal"
        size_hint_x: .55
        Label:
            text: "Favorite Color:"
            color: 0, 0, 0, 1
            size_hint_x: .265
        Label:
            text: "Blue"
            color: 0, 0, 0, 1
            size_hint_x: .15
        CheckBox:
            group: "fav_color"
            id : blue
            value: root.blue
            size_hint_x: .05
            on_active: root.checkbox_color(self, self.active) 
        Label:
            text: "Red"
            color: 0, 0, 0, 1
            size_hint_x: .15
        CheckBox:
            group: "fav_color"
            value: root.red
            size_hint_x: .05
            on_active: root.checkbox_color(self, self.active)

As a side question, how can I set the status of the checkbox with the id set to blue to be checked on start up (I thought the line blue = ObjectProperty(True) would do that)




Aucun commentaire:

Enregistrer un commentaire