我一直在使用配置对象来存储和检索 kivy 中应用程序的设置。问题是配置对象是全局的,并且是为系统中的所有 kivy 应用程序设置的。
我当前使用的内容:
from kivy.config import config
...App code
class UserAPP(App);
def build(self)
def build_config(self, config)
config.setdefaults() #multiple key,value pairs
我在 kivy 文档中搜索了执行此操作的方法,也许我在错误的位置或搜索错误的术语。
我的问题是:如何将设置/信息保存到一个文件中,该文件可以在启动时加载并在关闭时保存,该文件是每个应用程序的本地文件?
是的,
kivy.config.Config
对象是全局的,这意味着它将被所有 Kivy 应用共享。为了在 Kivy 应用中实现特定于应用的设置,需要使用不同的方法来存储和加载设置数据。以下是一些选项:
1. 使用 Python 内置的
json
模块:
-
可以使用
json
模块将设置数据序列化为 JSON 字符串,并将该字符串保存到文件中。 - 当的应用启动时,可以从文件中加载 JSON 字符串,并将其反序列化为 Python 字典。
```python import json
class UserApp(App): def init (self, kwargs): super(). init ( kwargs) self.settings_file = 'user_settings.json' self.load_settings()
def build(self):
# ...的应用代码...
def load_settings(self):
try:
with open(self.settings_file, 'r') as f:
self.settings = json.load(f)
except FileNotFoundError:
self.settings = {'username': '', 'theme': 'default'}
def save_settings(self):
with open(self.settings_file, 'w') as f:
json.dump(self.settings, f)
def on_stop(self):
self.save_settings()
```
2. 使用
kivy.storage
模块:
-
Kivy 提供了一个
kivy.storage
模块,可以使用它来存储键值对。 -
此模块提供了不同类型的存储后端,例如
dict
、json
和sqllite
。
```python from kivy.storage.jsonstore import JsonStore
class UserApp(App): def init (self, kwargs): super(). init ( kwargs) self.store = JsonStore('user_settings.json')
def build(self):
# ...的应用代码...
def on_start(self):
if self.store.exists('username'):
self.username = self.store.get('username')['value']
else:
self.username = 'Guest'
def on_stop(self):
self.store.put('username', value=self.username)
```
3. 使用配置文件(
.ini
文件):
-
可以使用 Python 的
configparser
模块来读取和写入.ini
文件。 - 这提供了一种结构化的方式来存储的设置。
```python import configparser
class UserApp(App): def init (self, kwargs): super(). init ( kwargs) self.config_file = 'user_settings.ini' self.config = configparser.ConfigParser() self.load_settings()
def build(self):
# ...的应用代码...
def load_settings(self):
try:
self.config.read(self.config_file)
except FileNotFoundError:
self.config['DEFAULT'] = {'username': '', 'theme': 'default'}
self.save_settings()
def save_settings(self):
with open(self.config_file, 'w') as f:
self.config.write(f)
def on_stop(self):
self.save_settings()
```
选择哪种方法取决于的具体需求和偏好。
json
模块易于使用,而
kivy.storage
模块提供了更多功能和不同的存储后端。
.ini
文件提供了一种更结构化的方式来存储设置,这在处理大量设置时很有用。