Kivy:Switch从INI文件中读取值
Posted
技术标签:
【中文标题】Kivy:Switch从INI文件中读取值【英文标题】:Kivy: Switch reads the value from the INI file 【发布时间】:2022-01-21 00:48:28 【问题描述】:kvstring = Builder.load_string('''
<AccParGui>:
BoxLayout:
orientation: "vertical"
Accordion:
AccordionItem:
title: 'EIP'
BoxLayout:
Button:
text: 'Into EIP'
GridLayout:
cols: 2
Label:
text: "refresh: "
Switch:
id: switch_eip_refresh
active: True
on_active: root.switch_eip_callback()
AccordionItem:
title: 'About'
Label:
text: 'Financial work aids'
''')
class BrowserPlatform():
def switch_eip_callback():
if self.set_refresh:
accpar_config.set('General', 'set_refresh', 'False') #write INI
self.ids.switch_eip_refresh.active = False
self.set_refresh = False
self.event_homepage_refresh.cancel()
else:
accpar_config.set('General', 'set_refresh', 'True')
self.ids.switch_eip_refresh.active = True
self.set_refresh = True
self.event_homepage_refresh = Clock.schedule_interval(
self.eip_refresh, self.set_refresh_time)
class AccParGui(Widget, BrowserPlatform
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.ids.switch_eip_refresh.active = accpar_config.getboolean('General', 'set_refresh')
# read from ini
class AccParGuiApp(App):
def build(self):
return AccParGui()
if __name__ == '__main__':
AccParGuiApp().run()
我使用 Switch 来切换值。如果 .INI 文件中读取的 Switch 值为 False,则自动执行 on_active 事件(True is not )。 我理解 Switch 的值是属性,Kivy 是自动监控的。即使我不点击切换。但我的意图是只通过点击来改变。我怎样才能做到这一点?希望有人指教,谢谢!
【问题讨论】:
【参考方案1】:on_active
事件在active
属性更改时触发。由于您的Switch
以active: True
开头,因此您的.INI
中的True
值不会发生更改,也不会触发事件。
保护switch_eip_callback()
方法不被意外执行的一个丑陋的技巧是设置一个布尔变量(可能命名为ignore_active_change
),并在switch_eip_callback()
中检查该变量。如果该变量是True
,只需将其设置回False
并返回即可。
这是我的意思的一个简单示例:
class AccParGuiApp(App):
def build(self):
root = Builder.load_string(kvstring)
self.ignore_switch_activity = True # ignore any changes in switch activity
root.ids.switch_eip_refresh.active = Config.getboolean('app', 'switch')
self.ignore_switch_activity = False # stop ignoring
return root
def switch_eip_callback(self):
if self.ignore_switch_activity:
print('ignoring switch')
else:
print('not ignoring switch')
【讨论】:
我是 Python 新手,想了一天还是不知道。能给个sn-p代码吗?谢谢 非常感谢您对新手的细心帮助! 仔细看,感觉你的代码有问题: self.ignore_switch_activity = True -------- 是 true ,但是第三行变成了 false 。如果在函数中再次判断,手动点击时需要点击两次build()
方法中的代码阻止使用触发代码加载使用Config
的开关设置。它被设置回 False 以允许触发。以上是关于Kivy:Switch从INI文件中读取值的主要内容,如果未能解决你的问题,请参考以下文章
Android kivy 在哪里放置应用程序文件(ini、图像数据库等)