You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kivy Python中波斯语/阿拉伯语多行文本显示倒置问题求助

解决Kivy中波斯语/阿拉伯语多行文本倒置问题

问题根源

当使用get_display处理包含自动换行的长RTL文本时,整个文本块会被当作单一RTL元素处理,导致多行的显示顺序被反转(从下到上)。短文本无此问题是因为未触发换行。

解决方案

通过逐行处理文本,确保每行的RTL转换正确,同时保留行的从上到下顺序。配合MDLabel的自动换行设置,即可实现正常显示。

修改后的完整代码

from kivy.lang import Builder
import arabic_reshaper
from bidi.algorithm import get_display
from kivymd.app import MDApp

def process_rtl_text(text):
    # 对文本逐行进行RTL转换,避免行顺序反转
    reshaped_text = arabic_reshaper.reshape(text)
    lines = reshaped_text.split('\n')
    processed_lines = [get_display(line) for line in lines]
    return '\n'.join(processed_lines)

KV = '''
#:import arabic_reshaper arabic_reshaper
#:import get_display bidi.algorithm.get_display
#:import process_rtl_text __main__.process_rtl_text

Screen:

    BoxLayout:
        orientation: "vertical"

        ScrollView:
            do_scroll_x: False
            do_scroll_y: True
            index:1

            MDCard:
                id: md_card
                orientation: "vertical"
                padding: "8dp"
                size_hint: None, None
                size: 300, 300

                MDLabel:
                    font_name: 'font/Sahel.ttf'
                    text: get_display(arabic_reshaper.reshape('تست نام'))
                    halign: "right"

                MDSeparator:
                    height: "1dp"

                MDLabel:
                    font_name: 'font/Sahel.ttf'
                    halign: "right"
                    text_size: self.width, None  # 启用自动换行,绑定控件宽度
                    text: process_rtl_text('این یک متن فارسی صرفا برای تست است در کیوی نمایش آن اشتباه از پایین به سمت بالا است.')

'''


class Test(MDApp):
    def build(self):
        return Builder.load_string(KV)


Test().run()

关键修改说明

  1. 新增process_rtl_text函数:将文本按行分割,逐行执行arabic_reshaper和get_display处理,再重新拼接,确保行顺序不被反转。
  2. 给长文本的MDLabel添加text_size: self.width, None:强制控件根据自身宽度自动换行,配合逐行处理的文本,实现正常的从上到下多行显示。
  3. 确保字体文件路径正确:Sahel.ttf需放在代码指定的font目录下。

内容的提问来源于stack exchange,提问作者goldaaa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:06:30