如何从开关访问开关参数/ID?
How to access switch argument / ID from switch?
如果我的问题放置不当,请原谅,我对这整个主题都是新手。在我的 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 传递?我的 shell 看起来像这样:
<kivy.uix.switch.Switch object at 0x1111B258> enabled
我尝试了 switchObject.id 但它不起作用。提前致谢!
找到开关 id
的一种方法是 for loop
和 root
的 ids
。
for i_d in self.ids:
if switchObject == self.ids[i_d]:
print(i_d)
break
您还必须将 PageLayout
class 重命名为其他名称,因为它的名称与 kivy 的 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)
如果我的问题放置不当,请原谅,我对这整个主题都是新手。在我的 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 传递?我的 shell 看起来像这样:
<kivy.uix.switch.Switch object at 0x1111B258> enabled
我尝试了 switchObject.id 但它不起作用。提前致谢!
找到开关 id
的一种方法是 for loop
和 root
的 ids
。
for i_d in self.ids:
if switchObject == self.ids[i_d]:
print(i_d)
break
您还必须将 PageLayout
class 重命名为其他名称,因为它的名称与 kivy 的 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)