#python #kivy #kivymd
#python #kivy #kivymd
Вопрос:
Я собираюсь создать приложение на kivymd, которое содержит арабские и персидские тексты.
Согласно моим поисковым запросам, для этого вам следует использовать arabic_reshaper и bidi.algorithm, а также использовать шрифт, поддерживающий персидский и арабский языки. В результате я смог написать код, подобный этому, и он хорошо поддерживает как персидский, так и арабский текст.
import kivy.app
import kivy.uix.label
import arabic_reshaper
import bidi.algorithm
class TestApp(kivy.app.App):
def build(self):
bidi_text = bidi.algorithm.get_display(arabic_reshaper.reshape("میلاد"))
return kivy.uix.label.Label(text=bidi_text, font_name="arial" , font_size="90sp")
testApp = TestApp()
testApp.run()
Теперь моя проблема в том, что я хочу закодировать свою программу следующим образом, в этом методе я могу изменить шрифт, но я не могу использовать метод arabic_reshaper и bidi.algorithm, и это приводит к отображению выходного текста таким образом.
from kivymd.app import MDApp
from kivymd.uix.screen import Screen
from kivymd.uix.label import MDLabel
from kivy.lang import Builder
import arabic_reshaper
import bidi.algorithm
screen_helper_up = """
Screen:
NavigationLayout:
ScreenManager:
Screen:
BoxLayout:
orientation: 'vertical'
MDToolbar:
title: 'میلاد'
font_name:'arial.ttf'
left_action_items: [["menu", lambda x: nav_drawer.toggle_nav_drawer()]]
elevation:10
Widget:
Label:
text: "میلاد"
font_name:'arial.ttf'
markup: True
font_size: 100
color: 0,0,0,1
MDNavigationDrawer:
id: nav_drawer
"""
class DemoApp (MDApp):
def build(self):
screen = Screen()
screen = Builder.load_string(screen_helper_up)
return screen
DemoApp().run()
Как вы можете видеть на изображении ниже, шрифт изменился только в Label и в заголовке MDToolbar, к сожалению, шрифт также не изменился.
-
Как я могу использовать … и … методы отображения персидского и арабского текста в приведенном выше коде?
-
Как я могу изменить шрифт в …?
Комментарии:
1. В вашем коде я не видел, чтобы вы использовали
arabic_reshaper
иbidi.algorithm
2. Как я сказал выше, я знаю в первом методе, как использовать arabic_reshaper и bidi.algorithm, Но во втором методе я не знаю, как использовать arabic_reshaper и bidi.algorithm. @Xyanight
Ответ №1:
Вот что я сделал: на языке Kv отсылаю текст к переменной ( app.res3
) в главном приложении:
`text:app.res3`
`font_name:'PTBLDHAD'`
В основном приложении я применил модуль reshaper следующим образом:
`text3 = ("الصفحة الرئيسية")`
reshaped_texts3 = arabic_reshaper.reshape(text3)
res3 = get_display(reshaped_texts3)
Ответ №2:
@aiyad-alreshidi Спасибо за ответ, я отредактировал код, как вы сказали (конечно, если я все понял правильно), и изменил его на этот код:
from kivymd.app import MDApp
from kivymd.uix.screen import Screen
from kivy.lang import Builder
import arabic_reshaper
import bidi.algorithm
screen_helper_up = """
Screen:
NavigationLayout:
ScreenManager:
Screen:
BoxLayout:
orientation: 'vertical'
MDToolbar:
title: app.res3
font_name:'iran.ttf'
left_action_items: [["menu", lambda x: nav_drawer.toggle_nav_drawer()]]
elevation:10
MDTextField:
text: app.res3
helper_text: app.res3
hint_text: app.res3
font_name: 'iran.ttf'
helper_text_mode: "persistent"
font_size: 30
line_color_focus: self.theme_cls.opposite_bg_normal
pos_hint: {'center_x': 0.5, 'center_y': 0.3}
size_hint: (0.5,0.4)
icon_right: "android"
Widget:
Label:
text: app.res3
font_name:'iran.ttf'
markup: True
font_size: 100
color: 0,0,0,1
MDNavigationDrawer:
id: nav_drawer
"""
class DemoApp (MDApp):
text3 = ("میلاد")
reshaped_texts3 = arabic_reshaper.reshape(text3)
res3 = bidi.algorithm.get_display(reshaped_texts3)
def build(self):
screen = Screen()
screen = Builder.load_string(screen_helper_up)
return screen
DemoApp().run()
К сожалению, как вы видите на изображении ниже, шрифт изменился только в Label и в заголовке MDToolbar, а также в MDTextField (helper_text и hint_text), опять же, он не изменился