如何在运行时让kivy设置配置中的默认值?

0 投票
1 回答
34 浏览
提问于 2025-04-12 21:12

我该如何让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 个回答

-1

我觉得如果你按照你说的那样去改变你的 Config 默认设置,对你当前正在运行的 App 是没有影响的。你可以通过让你的 Button 删除默认的 config.ini 文件来强制重置。默认的 config.ini 文件的路径在 Config.filename 里。下次启动任何 kivy 应用时,默认设置就会恢复。

另外一个选择是根本不使用 Config.write()(这个方法只是把当前的设置保存到 ini 文件里,而在只改变当前 App 的设置时并不必要)。然后只需执行 Config.read(Config.filename) 来恢复那些仍在 ini 文件里的设置。

撰写回答