从另一个.py文件访问Python字典并没有更新Kivy lab

2024-09-28 05:22:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想为我的应用程序做语言翻译。在另一个py文件中访问字典中的翻译对我来说最有意义。你知道吗

我可以从技术上访问字典值,但我不能在按下按钮时更改KV文件中的值。如有任何指导,我们将不胜感激!你知道吗

你知道吗主.py

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()

你知道吗pyfile.py文件

# -*- 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

Tags: 文件textfrompyimportenglishbuttonlanguage
2条回答
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对象,称为描述符,您可以查看它们是如何工作的。你知道吗

上面的代码是一个快速调整,以显示一种方法来做一些可以工作的事情,就像一个有效的逻辑流(未测试)的例子。你知道吗

埃伦和险恶帮助找到了解决办法。谢谢你们俩!!你知道吗

你知道吗主.py

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()

你知道吗pyfile.py文件

# -*- 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)

相关问题 更多 >

    热门问题