Как получить доступ к аргументу / идентификатору коммутатора из коммутатора? - PullRequest
0 голосов
/ 14 февраля 2020

Пожалуйста, прости, если мой вопрос задан неправильно, я новичок в этом вопросе. В моем файле python есть функция обратного вызова для моих переключателей, которую я создаю в своем файле .kv.

from kivy.app import App
from kivy.uix.pagelayout import PageLayout

class PageLayout(PageLayout): 
    statusMsg = 'Empty Status.'

    def switch_callback(self, switchObject, switchValue):
        #Switch values are True and False
        if(switchValue):
            statusMsg = '{0} enabled'.format(switchObject)
            print(statusMsg)
        else:
            statusMsg = '{0} disabled'.format(switchObject)
            print(statusMsg)
        return statusMsg

    def __init__(self): 
        super(PageLayout, self).__init__() 

class myGUI(App):
    def build(self):
        return PageLayout()

if __name__ == "__main__":
    myGUI().run()

Файл Kivy (мой GUI .kv):

<PageLayout>:
    BoxLayout:
        BoxLayout:
        Label:
            text: 'TestLabel'
        Switch:
            id: switchCal
            active: False
            on_active: root.switch_callback(*args)

Теперь я могу напечатать аргумент вызываемого объекта, но не идентификатор. Должен ли я использовать другую переменную, или идентификатор не передается с * args? Моя оболочка выглядит так:

<kivy.uix.switch.Switch object at 0x1111B258> enabled

Я пробовал switchObject.id, но он не работает. Заранее спасибо!

1 Ответ

0 голосов
/ 17 февраля 2020

Один из способов найти id коммутатора - это for loop с root s ids.

        for i_d in self.ids:
            if switchObject == self.ids[i_d]:
                print(i_d)
                break

Вы также должны переименовать свой класс PageLayout во что-то иначе, потому что его имя конфликтует с PageLayout.

полного кода для py части:

from kivy.app import App
from kivy.uix.pagelayout import PageLayout

class PageLayoutX(PageLayout):
    statusMsg = 'Empty Status.'

    def switch_callback(self, switchObject, switchValue):
        for i_d in self.ids:
            if switchObject == self.ids[i_d]:
                print(i_d)
                break
        # Switch values are True and False
        if (switchValue):
            statusMsg = '{0} enabled'.format(switchObject)
            print(statusMsg)
        else:
            statusMsg = '{0} disabled'.format(switchObject)
            print(statusMsg)
        return statusMsg

    def __init__(self):
        super(PageLayoutX, self).__init__()


class myGUI(App):
    def build(self):
        return PageLayoutX()


if __name__ == "__main__":
    myGUI().run()

... и kv части

<PageLayoutX>:
    BoxLayout:
        BoxLayout:
        Label:
            text: 'TestLabel'
        Switch:
            id: switchCal
            active: False
            on_active: root.switch_callback(*args)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...