在 kivy 应用的标签文本中使用孟加拉语

Posted

技术标签:

【中文标题】在 kivy 应用的标签文本中使用孟加拉语【英文标题】:using bangla language in label text of kivy app 【发布时间】:2019-11-29 12:19:59 【问题描述】:

我想在标签中添加孟加拉语文本。我为此使用了几种字体。在这里,我使用了 kalpurush.ttf。孟加拉语文本显示良好。但是孟加拉字母的顺序有些问题。我写了“তিন আস্তানা মাস্তান”।但它显示-“ত িন আসতানা মাসতান”它也没有显示连词。并且“ি”符号应该在“ত”之前,但在此之后。我正在使用 pydroid 应用程序。

在 kivy 启动器中,当我使用除英文以外的任何其他字体时,它只会崩溃。所以kivy启动器不支持任何其他字体。

我只是想知道在电脑上运行孟加拉语文本时的样子。但我没有电脑。

可以请任何人在电脑上运行此代码并给我截图吗?我只需要知道bangla字体在kivy中是否显示良好。因为我必须用我的母语(孟加拉语)制作一个 android 应用程序

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder

Builder.load_string('''

<hello>:
    Label:
        text:"তিন অাস্তানা মাস্তান"
        font_name:"kalpurush.ttf" #please download this font

''')

class hello(BoxLayout):
    pass

class go(App):
    def build(self):
        return hello()

go().run()

【问题讨论】:

这是您使用 Python 3.6.8 和 kivy 1.11.0 在 Ubuntu 18.04 上运行的代码的屏幕截图:screenshot。在 Windows 10 上运行会产生相同的结果。 有什么办法可以解决这个问题? python支持其他语言还是只支持英语?我必须用我的母语制作一个安卓应用程序。但是 python/kivy 不支持格式良好的孟加拉语!请帮我解决这个问题,我将不胜感激 @ashikuzzaman:你的操作系统是什么? 我在 pydroid 应用程序中运行我的代码。所以操作系统是安卓。我也想做一个安卓应用。但是在 pydroid 应用程序中,我遇到了该错误(如上所述),并且在 kivy 启动器中,如果我使用任何其他语言字体(不是英文),那么代码在 kivy 启动器中崩溃。所以我想知道有没有办法解决这个问题。你也可以看看约翰安德森的评论 你好 ikolim,你能帮帮我吗? 【参考方案1】:

我们可以使用 [font][/font] 标签在同一个 Label 小部件中使用 Bangla ANSI 文本和英文文本。像这样(kv 语言):

    text = "[font=font/SutonnyMJ]Avwg evsjvq K_v ewj[/font] means I speak Bangla"

但是如何生成带有字体标签的(英语和孟加拉语混合的)文本呢? This github repo提供解决方案:

def toBijoy(str):
    def isEnglish(s):
        return s.isascii()
    import converter
    test = converter.Unicode()
    b_flag = 0
    ftext = ""
    temp = ''
    for char in str:
        if char == ' ' and b_flag == 0:
            ftext += char
        elif char == ' ' and b_flag == 1:
            temp += char
        elif isEnglish(char) is False:
            if b_flag == 0:
                temp += "কর্ড [font=font/SutonnyMJ]" + char
                b_flag = 1
            else:
                temp += char
        else:
            if b_flag == 1:
                temp = test.convertUnicodeToBijoy(temp)
                temp = temp[4:] + "[/font]" + char
                ftext += temp
                b_flag = 0
                temp = ''
            else:
                ftext += char

    return ftext

现在我们可以转换文本(带有字体标签),使用 id 调用一个小部件,然后分配格式化文本。

self.ids.bangla_mixed_text.markup = True
self.ids.bangla_mixed_text.text = toBijoy(str)

在 kv 语言中,我们需要这样做:

Label:
    id: bangla_mixed_text
    text: ''

更多细节在 repo 中。

【讨论】:

以上是关于在 kivy 应用的标签文本中使用孟加拉语的主要内容,如果未能解决你的问题,请参考以下文章

在 Kivy 应用程序中获取文本输入值

Kivy 更改标签小部件来自另一个类的文本

使用屏幕管理器更新 kivy 标签

Python Kivy:self.ids 不更新标签文本

如何在 Kivy、Python 中更新标签的文本

Python kivy 更新不同屏幕中的标签文本