我正在为我的应用程序进行语言翻译。对我来说,从另一个py文件中的词典中访问翻译是最有意义的。
我可以从技术上访问字典值,但是当按下按钮时,不能在KV文件中更改值。任何指导将不胜感激!
from kivy.app import App
from kivy.lang import Builder
kv_file = Builder.load_string("""
#:import pyfile pyfile
ScreenManager:
id: manager
Screen:
GridLayout:
cols:1
rows:5
Button:
text: 'To English'
on_release:
pyfile.rando().chosen_language = pyfile.rando().English
Button:
text: 'To Croatian'
on_release:
pyfile.rando().chosen_language = pyfile.rando().Croatian
Label:
text:
pyfile.rando().chosen_language['MS First Button']
""")
class MyApp(App):
def build(self):
return kv_file
if __name__ == '__main__':
MyApp().run()
# -*- coding: utf-8 -*-
from kivy.properties import DictProperty
class rando(DictProperty):
English = {'MS First Button': 'Take the Quiz'
}
Croatian = {'MS First Button': 'Učinite Kviz'
}
chosen_language = English
答案 0 :(得分:1)
from kivy.app import App
from kivy.lang import Builder
from kivy.properties import DictProperty
kv_file = Builder.load_string("""
#:import pyfile pyfile
ScreenManager:
id: manager
Screen:
GridLayout:
cols:1
rows:5
Button:
text: 'To English'
on_release: app.translation_dict = app.English
Button:
text: 'To Croatian'
on_release: app.translation_dict = app.Croatian
Label:
text:
app.translation_dict['MS First Button']
""")
class MyApp(App):
English = {'MS First Button': 'Take the Quiz'}
Croatian = {'MS First Button': 'Učinite Kviz'}
translation_dict = DictProperty(English)
def build(self):
return kv_file
if __name__ == '__main__':
MyApp().run()
您对DictProperty的使用并不正确,属性仅在EventDispatcher中的类级别创建时才起作用。它们实际上是一种称为描述符的特殊类型的Python对象,您可以通过查询来了解它们的工作原理。
上面的代码是快速调整,以展示一种可行的方法,就像一个有效的逻辑流程示例(未经测试)。
答案 1 :(得分:0)
Eyllanesc和Inclement帮助找到了解决方案。谢谢你们!!
from kivy.app import App
from kivy.lang import Builder
kv_file = Builder.load_string("""
#:import pyfile pyfile
Manager:
id: manager
Screen:
GridLayout:
cols:1
rows:3
Button:
text: 'To English'
on_release:
manager.chosen_language = pyfile.Manager().English
Button:
text: 'To Croatian'
on_release:
manager.chosen_language = manager.Croatian
Button:
text:
manager.chosen_language['MS First Button']
""")
class MyApp(App):
def build(self):
return kv_file
if __name__ == '__main__':
MyApp().run()
# -*- coding: utf-8 -*-
from kivy.properties import DictProperty
from kivy.uix.screenmanager import ScreenManager
class Manager(ScreenManager):
English = {'MS First Button': 'Take the Quiz'
}
Croatian = {'MS First Button': 'Učinite Kviz'
}
chosen_language = DictProperty(Croatian)