Kivy: إدخال نص عربي

تم إنشاؤها على ١٩ أكتوبر ٢٠١٣  ·  38تعليقات  ·  مصدر: kivy/kivy

كيف يمكنني تحويل النص في وقت الكتابة؟ http://postimg.org/image/u40ftpwm9/ http://postimg.org/image/ibefw8b89/ كما ترون عندما أكتب في kivy كانت الكلمة خارج الشكل لذا استخدمت "arabic reshaper" لإصلاح هذه المشكلة . يمكنني الآن استخدام زر التحويل لإصلاحه ولكن كيف يمكنني إصلاح ذلك في وقت الكتابة دون الضغط على زر التحويل؟

تريد أن تدعم هذه القضية؟ أضف مكافأة على ذلك! نقبل المنح عبر Bountysource .

Has PR Feature

التعليق الأكثر فائدة

أقوم بإنشاء رابط Python لمكتبة harfbuzz لاستخدام معلومات الحروف الرسومية النصية الخاصة بها داخل kivy حتى نتمكن من التقدم بالمؤشر بالتفاصيل التي يقدمها لنا. مع مزيج من python-bidi و pyharfbuzz ، يمكننا الحصول على دعم متعدد اللغات لـ kivy.

ال 38 كومينتر

حاول معالجة الإدخال مسبقًا عن طريق تجاوز insert_text وتمرير النص من خلال إعادة تشكيل اللغة العربية.

سيظل هذا اختراقًا ونحتاج إلى دعم مناسب للغات من اليمين إلى اليسار ، كما أن طلبات المساهمات / السحب مرحب بها دائمًا ، وسيساعد ذلك إذا كان بعض الأشخاص المألوفين بلغات RtoL قد خصصوا وقتًا لهذا الغرض.

tnx لإجابتك. لقد وجدت هذا "insert_text (سلسلة فرعية ، from_undo = False)" في واجهة برمجة التطبيقات ، هل يمكنك أن تعطيني مثالًا بسيطًا لاستخدامه؟ أنا جديد جدا في kivy.

وهل من الممكن استخدام halign لـ rtl في إدخال النص؟

لا يدعم إدخال النص المحاذاة حتى الآن ، وهذا هو ذ قلت إننا نحتاج بالفعل إلى دعم مناسب للغات RtoL.

نعم . ماذا عن مثال insert_text؟

tnx أكتب هذا في main.py ، فكيف يمكنني إخبار kivy باستخدامه لإدخال النص؟

main.py هي:

import kivy
import arabic_reshaper
from bidi.algorithm import get_display

kivy.require('1.5.1')

from kivy.app import App
from kivy.properties import ObjectProperty
from kivy.uix.floatlayout import FloatLayout

from components.initialize import initialize_platform
from components.ttsspeak import ttsSpeak
from kivy.uix.textinput import TextInput

class NumericInput(TextInput):

    def insert_text(self, substring, from_undo=False):
        if not from_undo:
            try:
                int(substring)
            except ValueError:
                return
        super(NumericInput, self).insert_text(substring, from_undo)

class SayThis(FloatLayout):
    saywhat_text = ObjectProperty(None)

    def say_something(self, text):
        ttsSpeak(text)

    def clear(self, text):
        print text
        reshaped_text = arabic_reshaper.reshape(text)
        text = bidi_text = get_display(reshaped_text)
        print text
        self.saywhat_text.text =  text
        self.saywhat_text.focus = True


class SayThisApp(App):
    def build(self):
        initialize_platform()
        return SayThis()


if __name__ == '__main__':
    SayThisApp().run()

لقد غيرت kivy.uix.textinput.py إلى هذا:

def _create_line_label(self, text, hint=False):
        reshaped_text = arabic_reshaper.reshape(text)
        text = get_display(reshaped_text)

والآن لا توجد مشكلة في إظهار العربية والفارسية ولكني أغيرها في جوهر kivy وهي ليست طريقة جيدة. كيف يمكنني فرض إدخال نص لاستخدام فئة نص الإدخال داخل تطبيقي؟ كما قلت أنا جديد جدا في kivy

حسنًا ، ربما سيكون من الجيد إجراء علاقات عامة لهذا التغيير؟ هذا يضيف أ
تبعية kivy إلى reshaper العربية ، لكننا بحاجة إلى التدويل
على أي حال ، ما لم تكن هناك طريقة أفضل للقيام بذلك ، أعتقد أن هذا هو الطريق
إلى الأمام.

على الأقل ينبغي مناقشتها.

إذا كنت تريد أن تفعل ذلك فقط لتطبيقك ، فيمكنك حضور فصل دراسي

فئة BidiTextInput (إدخال نص):
def _create_line_label (ذاتي ، نص ، تلميح = خطأ):
reshaped_text = arabic_reshaper.reshape (نص)
text = get_display (reshaped_text)
سوبر (BidiTextInput ، self) ._ create_line_label (نص ، تلميح)

واستخدم هذه الفئة بدلاً من إدخال النص في باقي التعليمات البرمجية. (بالكيلو فولت
و python ، اتصل بـ BidiTextInput بدلاً من TextInput ، في كل مرة تحتاجها
هو - هي). (قد لا يكون BidiTextInput اسمًا رائعًا ، أنا بحيرة الخيال بشكل صحيح
الآن: P)

لكنني أعتقد أنه سيكون إضافة لطيفة إلى kivy.

في الأحد 20 أكتوبر 2013 الساعة 03:16:32 صباحًا -0700 صباحًا ، كتب نعمة:

لقد غيرت kivy.uix.textinput.py إلى هذا: +1:
def _create_line_label (ذاتي ، نص ، تلميح = خطأ):
reshaped_text = arabic_reshaper.reshape (نص)
text = get_display (reshaped_text)
والآن لا توجد مشكلة في اللغة العربية والفارسية ولكني أغيرها في جوهر kivy وهي ليست طريقة جيدة. كيف يمكنني فرض إدخال النص لاستخدام فئة نص الإدخال في تطبيقي؟ كما قلت أنا جديد جدا في kivy


قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub:
https://github.com/kivy/kivy/issues/1570#issuecomment -26670261

tnx. هناك مشكلة أخرى مع اليمين إلى اليسار ويجب أن أعمل عليها

أفهم أنها تعمل الآن ، العلاقات العامة؟ : ص

في الإثنين 21 تشرين الأول (أكتوبر) 2013 الساعة 12:25:13 صباحًا -0700 صباحًا ، كتب نعمة:

tnx. هناك مشكلة أخرى مع اليمين إلى اليسار وأنا أعمل عليها


قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub:
https://github.com/kivy/kivy/issues/1570#issuecomment -26697061

ما زلت أعمل من اليمين إلى اليسار ، وحل لي هو الحصول على موضع المؤشر ودقة الشاشة واستخدام علامة التبويب لنقل الكلمة إلى المكان الصحيح. هل تمتلك فكرة افضل؟

يا! أين يمكنني أن أجد أداة إعادة تشكيل اللغة العربية؟

يا! أين يمكنني أن أجد أداة إعادة تشكيل اللغة العربية؟

https://github.com/mpcabd/python-arabic-reshaper

هل تريد نسخة haxe؟
في 5 أغسطس 2014 ، الساعة 7:32 مساءً ، كتب "Kashif Iftikhar" [email protected] :

يا! أين يمكنني أن أجد أداة إعادة تشكيل اللغة العربية؟

https://github.com/mpcabd/python-arabic-reshaper

-
قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub
https://github.com/kivy/kivy/issues/1570#issuecomment -51223419.

لن تعمل على textinput

def _create_line_label (ذاتي ، نص ، تلميح = خطأ):
reshaped_text = arabic_reshaper.reshape (نص)
text = get_display (reshaped_text)
ستؤدي إضافته إلى TextInput إلى الحصول على:
Traceback (آخر مكالمة أخيرة):
ملف "/home/sajad/PycharmProjects/kimiastone/Persian.py" ، السطر 112 ، في
myApp (). run ()
ملف "/usr/local/lib/python2.7/dist-packages/kivy/app.py" ، السطر 824 ، قيد التشغيل
runTouchApp ()
ملف "/usr/local/lib/python2.7/dist-packages/kivy/base.py" ، السطر 487 ، في runTouchApp
EventLoop.window.mainloop ()
ملف "/usr/local/lib/python2.7/dist-packages/kivy/core/window/window_pygame.py" ، السطر 401 ، في mainloop
self._mainloop ()
ملف "/usr/local/lib/python2.7/dist-packages/kivy/core/window/window_pygame.py" ، السطر 288 ، في _mainloop
EventLoop.idle ()
ملف "/usr/local/lib/python2.7/dist-packages/kivy/base.py" ، السطر 327 ، في وضع الخمول
Clock.tick ()
ملف "/usr/local/lib/python2.7/dist-packages/kivy/clock.py" ، السطر 483 ، في وضع علامة
self._process_events ()
ملف "/usr/local/lib/python2.7/dist-packages/kivy/clock.py" ، السطر 615 ، في _process_events
event.tick (self._last_tick ، ​​إزالة)
ملف "/usr/local/lib/python2.7/dist-packages/kivy/clock.py" ، السطر 374 ، في وضع علامة
ret = رد الاتصال (self._dt)
ملف "/usr/local/lib/python2.7/dist-packages/kivy/uix/textinput.py" ، السطر 1512 ، في _refresh_line_options
self._refresh_text_from_property ()
ملف "/usr/local/lib/python2.7/dist-packages/kivy/uix/textinput.py" ، السطر 1531 ، في _refresh_text_from_property
self._refresh_text (self._get_text (ترميز = خطأ) ، * كبير)
ملف "/usr/local/lib/python2.7/dist-packages/kivy/uix/textinput.py" ، السطر 1551 ، في _refresh_text
_line_rects.append (مستطيل (الحجم = lbl.size))
AttributeError: الكائن "NoneType" ليس له سمة "حجم"

أنا أعمل حاليًا على دعم rtl الخاص بـ kivy. لذلك أخطط للبدء بتنفيذ إعادة تشكيل في c (cython). أي اقتراح ؟

لا توجد أداة إعادة تشكيل في لغة c ولكن يمكنك استخدام أداة إعادة تشكيل اللغة العربية وثنائي الاتجاه في سايثون وبايثون

أعتقد أنه يجب أن تكون هناك بعض التغييرات في عنصر واجهة المستخدم مثل خاصية algin
أنا أعمل على دعم الجين القطعة

أعتقد أنه يجب علي استبدال windows x بـ 0

الصعوبة الوحيدة هي إدخال النص متعدد الأسطر والاختيار والعلامات. من السهل القيام بذلك في فئات LabelBase (SDL و PyGame و Pil).

يا @ pylover هل حصلت على بعض النتائج؟ سيكون من الجيد المضي قدمًا في هذا :)

ممتع ، لكن ليس لدي وقت.
أخطط لمشروع مع kivy في الشهر المقبل. أعتقد أنها فرصة جيدة للقيام بذلك.

أنا أبدأ الآن. أنا أحب kivy

إتبع

مرحبا
شكرا على كل فكرة
لكن هناك مشكلة لم تحل
والمشكلة هي: عندما أقوم بتحويل ملف .py إلى ملف .apk ، أجد مشكلة جديدة تتمثل في ترميز إدخال النص في نظام android هي "str" ​​والنوع سداسي عشري ولكن إعادة التشكيل تحصل على unicode utf-8
الآن كيف يمكنني تحويله إلى يونيكود لإعادة التشكيل ؟؟

@ motad333 ، ليس لدي أي فكرة ، قد يساعدك مطورو kivy الأساسيون.

تم وضع علامة على هذه المشكلة تلقائيًا على أنها قديمة نظرًا لعدم وجود نشاط حديث لها. سيتم إغلاقه إذا لم يحدث أي نشاط آخر. شكرا لمساهماتكم.

يحتوي المؤشر على خطأ في إدخال النص الفارسي / العربي ولن يعمل حتى يقوم SDL بإصلاح هذه المشكلة.
تظهر المشكلة من kivy.core.label.LabelBase.get_extents (). تم تنفيذه في pygame و PIL و SDL. منذ استخدام pygame و PIL لـ SDL2 ttf ، يواجه تطبيق LabelBase لهؤلاء المزودين مشكلة أيضًا.

kivy_input

تحتوي مفترقتي على إصلاح للزر / التسمية الفارسية / العربية ، ولكن يتعين على المستخدم تغيير اسم الخط إلى اسم خط فارسي / عربي صالح ، لأن الخط الافتراضي لا يعمل مع اللغة الفارسية. يمكنني إنشاء علاقات عامة إذا كنت تريد.

تحرير: أحاول أن أجد مشكلة SDL2 في عرض اللغة العربية / الفارسية ، لكن ليس لدي خبرة سابقة حول كيفية عمل عرض الخط / النص.

RevengeComing ..hi أريد استخدام هذا الحل في تطبيقي .. هل يمكن أن تخبرني كيف

engmms ، ومع ذلك فهو ليس حلاً صالحًا ولكن يمكنك تثبيت مفترقتي:
pip install git+https://github.com/RevengeComing/kivy.git
(قد تحتاج إلى تثبيت rtl و arabic_reshaper و python-bidi وتثبيتها باستخدام نقطة)

وعليك إضافة خط فارسي / عربي إلى التطبيق الخاص بك وتغيير كل اسم الخط الخاص بالتسميات / الأزرار / مدخلات النص إلى الخط الخاص بك لأن الخط الافتراضي لا يدعم اللغة الفارسية / العربية.

أقوم بإنشاء رابط Python لمكتبة harfbuzz لاستخدام معلومات الحروف الرسومية النصية الخاصة بها داخل kivy حتى نتمكن من التقدم بالمؤشر بالتفاصيل التي يقدمها لنا. مع مزيج من python-bidi و pyharfbuzz ، يمكننا الحصول على دعم متعدد اللغات لـ kivy.

مرحبا مجددا،

لقد قمت بإنشاء مستودع kivy_i18n لحل هذه المشكلة:

النتيجه هي:
peek 2018-01-22 16-23

يتطلب pyharfbuzz و python-fribidi اللذان يدعمان فقط Linux (py3 و py2) و mac (py3) في الوقت الحالي بالإضافة إلى harfbuzz و fribidi و freetype2.

يعاني TextInput من بعض المشاكل مثل عدم كونه rtl و ... لكنني سأضيف هذه الميزات إليه.

طيبRevengeComing ... شكرا على كلمتك الصعبة ..

RevengeComing ... سأختبر هذا الحل

يتوفر الآن دعم تجريبي رئيسي باستخدام KIVY_TEXT = pango

على الرغم من علمي أن هذا الحل يعمل فقط على Linux و OSX ، إلا أن هناك حاجة بالتأكيد إلى مزيد من العمل حتى يعمل على Windows والأنظمة الأساسية للجوّال.

RevengeComingtshirtman أهلاً صديقي ، ما الأمر؟ هل هذه الميزة جاهزة للدمج في تطبيقات الجوال و Windows؟ أنا قلق حقًا بشأن Android الآن بدلاً من Windows. أحد الحلول السخيفة للمتحدثين بالفارسية / الفارسية هو استخدام Finglish. :)

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات