我正在学习如何实现 Kivy 设置面板。这对于几个用例来说是完美的,但我无法弄清楚如何在构建后立即在我的应用程序中显示设置的值。
我从这里的 PalimPalims 答案中借用了这个示例代码。更改设置时效果很好,但在更改设置面板中的值之前,标签小部件没有文本。text: App.get_running_app().config.get('Label','content')在将 App 导入构建部分后,我尝试将其添加到 kv 语言部分文本中。
我还尝试在 Apps 构建函数中分配小部件值,但一直收到错误“MyApp 没有 ids”。我必须相信这是可行的,我只是在阅读文档中的方法。
from kivy.app import App
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.lang import Builder
from kivy.uix.label import Label
from kivy.config import Config
class Labelwithconfig(Label):
def check_label(self):
self.text = App.get_running_app().config.get('Label','content')
kv_str = Builder.load_string("""
BoxLayout:
orientation: 'vertical'
Labelwithconfig:
id: labelconf
Button:
text: 'open settings'
on_press: app.open_settings()
""")
class MyApp(App):
def build_config(self, config):
config.setdefaults('Label', {'Content': "Default label text"})
def build_settings(self, settings):
settings.add_json_panel("StackOverflow Test Settings", self.config, data="""
[
{"type": "options",
"title": "Label text System",
"section": "Label",
"key": "Content",
"options": ["Default label text", "Other Label text"]
}
]"""
)
def on_config_change(self, config, section, key, value):
self.root.ids.labelconf.check_label()
def build(self):
return kv_str
if __name__ == '__main__':
MyApp().run()
芜湖不芜
相关分类