如何从交换机访问交换机参数/ID?

2024-06-28 20:54:17 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我的问题没有放好,请原谅,我对这个问题还不熟悉。在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文件(myGUI.kv):

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

现在,我可以打印被调用的对象参数,但不能打印id。我必须使用另一个变量,还是id没有用*args传递?我的外壳看起来像这样:

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

我尝试了switchObject.id,但它不起作用。提前谢谢


Tags: 文件函数fromimportselfiddefkv
1条回答
网友
1楼 · 发布于 2024-06-28 20:54:17

查找开关的id的一种方法是使用rootids作为for loop

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

您还必须将PageLayout类重命名为其他类,因为它的名称与kivy的PageLayout冲突

{}部分的完整代码:

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()

。。。以及{}部分

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

相关问题 更多 >