Entrada de texto Kivy para texto en árabe

Estoy tratando de usar la entrada de texto de Kivy para el texto en árabe. Tengo una fuente en árabe configurada con mi entrada de texto, pero cuando escribo en la entrada (en árabe), aparecen letras en árabe de izquierda a derecha (y no están conectadas, como deberían estar las letras en árabe cuando están adyacentes a El uno al otro).

¿Hay alguna forma de que Kivy / entrada de texto sea compatible con la entrada de idiomas RTL que me falta (especialmente en árabe)?

Aquí está mi código,

from kivy.app import App from kivy.uix.floatlayout import FloatLayout Config.set('graphics', 'width', '300') Config.set('graphics', 'height', '500') logger = logging.getLogger('') from kivy.uix.textinput import TextInput class EditorApp(App): def build(self): f = FloatLayout() textinput = TextInput(text='Hello world', font_name='DroidKufi-Regular.ttf') # import pdb; pdb.set_trace() f.add_widget(textinput) return f if __name__ == '__main__': EditorApp().run() 

El resultado de este código:

introduzca la descripción de la imagen aquí

Desafortunadamente, el soporte de Kivy TextInput para derecha a izquierda es un problema abierto (verificado el 29/05/2015). En realidad, Kivy no admite de derecha a izquierda no solo para TextInput.

Para textos estáticos como tags, hay un truco utilizando arabic_reshaper y python-bidi ( referencia ):

 import arabic_reshaper from bidi.algorithm import get_display reshaped_text = arabic_reshaper.reshape(u'اللغة العربية رائعة') bidi_text = get_display(reshaped_text) 

introduzca la descripción de la imagen aquí

Sin embargo, en cuanto a TextInput con una entrada dinámica, tuvo que anular la mayoría de los métodos de clase para admitir RTL y terminará implementando todo el soporte de RTL en kivy.

Aquí hay un bash abierto de implementar el soporte bidi de Kivy . Otro cerrado: soporte de tags de derecha a izquierda .

Así que hubo una respuesta que afortunadamente pude comunicar y probar.

Los enlaces están aquí: https://github.com/hosseinofj/persian_textinput_kivy/blob/master/codes

Ya que se eliminó por no explicar, y no publicar el código aquí, lo haré yo mismo, ¡aunque el usuario que publicó este enlace también debe ser agradecido de alguna manera!

De todos modos, aquí está el código:

test.kv

 : text: "whatever" multiline: 0 size_hint: 1,1 font_name: "data/unifont-11.0.02.ttf" # the font you want to use font_size: 26 padding_y: [15,0] # can be changed padding_x: [self.size[0]-self._get_text_width(max(self._lines, key=len), self.tab_width, self._label_cached)-10,8] 

main.py

 ''' App demonstrating a Text input field which accepts Arabic script in kivy ''' import arabic_reshaper from bidi.algorithm import get_display from kivy.app import App from kivy.uix.textinput import TextInput from kivy.properties import ObjectProperty, NumericProperty, StringProperty class Ar_text(TextInput): max_chars = NumericProperty(20) # maximum character allowed str = StringProperty() def __init__(self, **kwargs): super(Ar_text, self).__init__(**kwargs) self.text = get_display(arabic_reshaper.reshape("اطبع شيئاً")) def insert_text(self, substring, from_undo=False): if not from_undo and (len(self.text) + len(substring) > self.max_chars): return self.str = self.str+substring self.text = get_display(arabic_reshaper.reshape(self.str)) substring = "" super(Ar_text, self).insert_text(substring, from_undo) def do_backspace(self, from_undo=False, mode='bkspc'): self.str = self.str[0:len(self.str)-1] self.text = get_display(arabic_reshaper.reshape(self.str)) class TestApp(App): def build(self): return Ar_text() if __name__ == '__main__': TestApp().run() 

El truco con esto es usar arabic_shaper

Por lo tanto, en cada actualización del texto, proporcionas la entrada de texto con una cadena formateada usando el arabic_shaper .

Todavía existe el problema fundamental de que la verdadera RTL no está allí (el cursor siempre está a la derecha al final de una cadena)

Agregué un repository con el código de muestra. Se ejecutó en Ubuntu. También debería ejecutarse en Windows si Kivy está correctamente instalado.

https://github.com/eliasaj92/arabic_text_input_kivy