首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从switch访问switch参数/ ID?

如何从switch访问switch参数/ ID?
EN

Stack Overflow用户
提问于 2020-02-14 21:48:32
回答 1查看 94关注 0票数 0

如果我的问题放得不恰当,请原谅,我对这个话题还是个新手。在我的python文件中,我有一个用于开关的回调函数,它是我在.kv文件中创建的。

代码语言:javascript
运行
复制
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):

代码语言:javascript
运行
复制
<PageLayout>:
    BoxLayout:
        BoxLayout:
        Label:
            text: 'TestLabel'
        Switch:
            id: switchCal
            active: False
            on_active: root.switch_callback(*args)

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

代码语言:javascript
运行
复制
<kivy.uix.switch.Switch object at 0x1111B258> enabled

我试过switchObject.id,但它不起作用。提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-17 18:15:41

查找交换机的id的一种方法是使用带有rootidsfor loop

代码语言:javascript
运行
复制
        for i_d in self.ids:
            if switchObject == self.ids[i_d]:
                print(i_d)
                break

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

py部件的完整代码:

代码语言:javascript
运行
复制
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部分

代码语言:javascript
运行
复制
<PageLayoutX>:
    BoxLayout:
        BoxLayout:
        Label:
            text: 'TestLabel'
        Switch:
            id: switchCal
            active: False
            on_active: root.switch_callback(*args)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60227621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档