在kivy中使用自定义字体

时间:2019-05-28 14:47:12

标签: python kivy kivy-language

我正在尝试创建一个简单的kivy软件,我需要为button.text使用自定义的阿拉伯字体。

我已经在文件中包含了自定义字体并尝试过,但这是这样的:

enter image description here

我不确定这是否是编码问题,还是需要在Kivy中使用其他内容

这是我的代码:

main.py

import kivy
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.core.window import Window


class MyGrid(Widget):
    pass

class BackOffice(App):
    def build(self):
        return MyGrid()


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

backoffice.kv


#:import utils kivy.utils


<MyGrid>
    canvas.before:
        Color:
            rgba: utils.get_color_from_hex('#a1d0f4')
        Rectangle:
            pos: self.pos
            size: self.size

    GridLayout:
        cols: 1
        size: root.width, root.height
        Label:
            text: 'logo here'
        GridLayout:
            cols: 2
            Label:
                text: ' vision logo goes here'
            GridLayout:
                cols:1
                Button:
                    size: 700, 120
                    size_hint: None, None # <---
                    background_color: utils.get_color_from_hex('#0a74c4')
                    font_name: 'fonts/Shoroq-Font.ttf'
                    text: "إعدادت المستخدمين"
                    Image:
                        source: 'images/conference-256.png'
                        y: self.parent.y + 5
                        x: self.parent.x + 70



                Button:
                    text:'button'
                    background_color: utils.get_color_from_hex('#0a74c4')
                Button:
                    text:'button'
                    background_color: utils.get_color_from_hex('#0a74c4')
                Button:
                    text:'button'
                    background_color: utils.get_color_from_hex('#0a74c4')
        GridLayout:
            cols: 3
            Button:
                text: 'button'
                background_color: utils.get_color_from_hex('#ff0000')
            Button:
                text: 'button'
                background_color: utils.get_color_from_hex('#0a74c4')
            Label:
                text: 'some text here'

*更新* 我也尝试使用基于This question的阿拉伯文整形器,但结果仍然相同!因为问题是关于Textinput,而不是一般的文本查看。

1 个答案:

答案 0 :(得分:1)

使用arabic.reshaperbidi.algorithm的解决方案

示例

main.py

fixture.detectChanges()

main.kv

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.properties import StringProperty
import arabic_reshaper
from bidi.algorithm import get_display

Builder.load_file("main.kv")


class MyGrid(Widget):
    bidi_text = StringProperty('')

    def __init__(self, **kwargs):
        super(MyGrid, self).__init__(**kwargs)
        reshaped_text = arabic_reshaper.reshape(u"إعدادت المستخدمين")
        self.bidi_text = get_display(reshaped_text)


class BackOffice(App):
    def build(self):
        return MyGrid()


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

输出

Result