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

Вот код файла приложения (только не ругайте пожалуйста, я последний раз что-то писал год назад...):
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 шт):
Ура, я наконец-то мог разобраться в этом. Проблема была в том, что шрифт, который использует 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()