Доступ к словарям Python из другого файла .py не обновляет метку Kivy - PullRequest
0 голосов
/ 19 декабря 2018

Я хочу сделать языковые переводы для моего приложения.Доступ к переводам из словарей в другом файле py имеет для меня наибольшее значение.

Я могу технически получить доступ к значениям словаря, но не могу изменить значения в файле KV при нажатии кнопки.Будем искренне благодарны за любые рекомендации!

main.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

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Eyllanesc и Inclement помогли найти решение.Спасибо вам обоим !!

main.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)
0 голосов
/ 19 декабря 2018
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, называемый дескрипторами, вы можете посмотреть, как они работают.

Приведенный выше код является быстрой настройкой, чтобы показать способ выполнения работ, просто в качестве примера.действительного логического потока (не проверено).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...