Приложение на Kivy python некорректно отображает символы в Label

Всем кто это читает привет :)

У меня возникла проблема при использование Kivy на Python. Мне потребовалось срочно сделать приложение на телефон (Андроид), которое будет выводить английское слово, его тип, транскрипцию, перевод и т.д. Все данные изначально были в таблице Excel и из них я создал список. После этого я сделал код, который создаёт окно приложения Kivy, где есть кнопка, меняющая слово, и Lable со словом и остальной информацией. При тестировке я увидел, что некоторые символы из транскрипции не отображаются в Lable, но если я просто выведу список в терминал, то все символы будут на месте. Изначально я поискал решение в интернете, но подобных проблем не нашёл. У людей были проблемы с отображением кириллицы, но у меня она отображается. Как исправить эту проблему?

Вот как выглядит окно приложения: Окно приложения Kivy

Вот код файла приложения (только не ругайте пожалуйста, я последний раз что-то писал год назад...):

import write_bd
import random

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout

class MyApp(App):
    def build(self):
        self.label = Label(text="Привет, Android!")
        button = Button(text="Нажми меня")
        button.bind(on_press=self.update_label)
        
        layout = BoxLayout(orientation='vertical')
        layout.add_widget(self.label)
        layout.add_widget(button)
        
        return layout

    def update_label(self, instance):
        t = write_bd.dann[random.randint(0, len(write_bd.dann))]
        self.label.text = (str(t[0]) + " " + str(t[1]) + " " + str(t[2]) + " " + str(t[3]) + " " + str(t[4]))

if __name__ == "__main__":
    MyApp().run()

Переменная write_bd.dann имеет вид:

[(3789, 'young', 'adjective', 'jʌŋ', 'молодой', 'A1'), (3790, 'young', 'noun', 'jʌŋ',
 'молодежь', 'B1'), (3791, 'your', 'determiner', 'jɔːr', 'твой', 'A1'), (3792, 'yours', 'pronoun', 'jɔːz',
 'твой', 'A2'), (3793, 'yourself', 'pronoun', 'jɔːˈself', 'себя', 'A1'), (3794, 'youth', 'noun', 'juːθ', '
молодежь', 'B1'), (3795, 'zero', 'number', 'ˈzɪərəʊ', 'ноль', 'A2')]

только из большего количества элементов.


Ответы (1 шт):

Автор решения: Yraron

Ура, я наконец-то мог разобраться в этом. Проблема была в том, что шрифт, который использует Kivy просто не поддерживает данные символы. Изменённый код:

import write_bd
import random

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout

class MyApp(App):
    def build(self):
        self.label = Label(text="Привет, Android!", markup=True)
        button = Button(text="Нажми меня")
        button.bind(on_press=self.update_label)
        
        layout = BoxLayout(orientation='vertical')
        layout.add_widget(self.label)
        layout.add_widget(button)
        
        return layout

    def update_label(self, instance):
        t = write_bd.dann[random.randint(0, len(write_bd.dann))]
        self.label.text = (str(t[0]) + " " + str(t[1]) + " " + str(t[2]) + " [font=NotoSans-VariableFont_wdth,wght.ttf]" + str(t[3]) + "[/font] " + str(t[4]))

if __name__ == "__main__":
    MyApp().run()

Шрифт скачал здесь

→ Ссылка