如何在运行时让kivy设置配置中的默认值?
我该如何让Kivy在运行时用默认值更新指定的配置呢?
在我的应用里,有一个“重置设置为默认值”的按钮,它会删除我在Kivy配置中的所有条目,包括在[kivy]
这一部分。
# delete all the options saved to the config file
sections = ['kivy','myapp','etc']
for section in sections:
for key in Config[section]:
Config.remove_option( section, key )
# write-out the changes to the .ini file
Config.write()
执行完这些命令后,我的.ini文件中的[kivy]
部分就变成空的了,这正是我想要的。
问题是,后面的代码中出现了一个NoOptionError
错误,它期待在Kivy配置中有default_font
这个选项。
configparser.NoOptionError: No option 'default_font' in section: 'kivy
在上面的代码清空了我的.ini文件中[kivy]
部分的配置选项后,我该如何让Kivy用默认值重新填充它呢?
当我重启应用时,Kivy确实会如我所愿地重新填充我的.ini文件中的[kivy]
部分。我可以看到执行这个操作的代码在这里:
elif version == 16:
Config.setdefault('kivy', 'default_font', [
'Roboto',
'data/fonts/Roboto-Regular.ttf',
'data/fonts/Roboto-Italic.ttf',
'data/fonts/Roboto-Bold.ttf',
'data/fonts/Roboto-BoldItalic.ttf'])
但是,我该如何在运行时执行上面的Kivy代码,以便在不重启应用的情况下用默认值更新我的配置呢?
注意 我知道我可以手动创建一个
build_config()
函数,并调用Config.setdefaults('kivy', {...})
,在字典里自己输入默认值。这不是我想要的。我想知道如何调用Kivy内部的代码,这样就不会重复代码,并且能够适应未来的变化。
1 个回答
我觉得如果你按照你说的那样去改变你的 Config
默认设置,对你当前正在运行的 App
是没有影响的。你可以通过让你的 Button
删除默认的 config.ini
文件来强制重置。默认的 config.ini
文件的路径在 Config.filename
里。下次启动任何 kivy
应用时,默认设置就会恢复。
另外一个选择是根本不使用 Config.write()
(这个方法只是把当前的设置保存到 ini
文件里,而在只改变当前 App
的设置时并不必要)。然后只需执行 Config.read(Config.filename)
来恢复那些仍在 ini
文件里的设置。