python - 如何在kivy中制作文件选择器以支持不同语言的文件(英语,希伯来语)

标签 python kivy kivy-language

我正在使用 kivy 的文件选择器,当文件夹中有一个带有希伯来语名称的文件时,它会打印出乱码...... 如果可能的话,我想支持不同的语言。 尝试更改文件选择器中的字体名称,对我来说不起作用。 你能帮我找出我做错了什么吗?

最佳答案

不仅仅是 FileChooser - Kivy 中 Label 的所有实例都使用 Roboto 字体作为默认字体,该字体似乎不支持 Unicode人物。尝试运行此代码:

from kivy.app import App
from kivy.uix.label import Label


class TestApp(App):
    def build(self):
        return Label(text="עִבְרִית‎")


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

several fonts随 Kivy 一起提供,其中之一是 DejaVuSans。让我们使用它:

from kivy.app import App
from kivy.uix.label import Label


class TestApp(App):
    def build(self):
        return Label(text="עִבְרִית‎", font_name='DejaVuSans.ttf')


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

现在希伯来语可以正确显示。不过,这对日语不起作用。对于该语言,您必须寻找另一种 Unicode 字体,将其放入目录中并传递给 font_name 属性。

无论如何。如何让FileChooser使用不同的字体?最简单的方法是将方法绑定(bind)到 on_entry_added 事件,以更改目录树中新创建的项目的属性:

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


Builder.load_string("""
<MyWidget>:
    FileChooserListView
        id: filechooser
""")

class MyWidget(BoxLayout):
    def __init__(self, *args):
        Clock.schedule_once(self.update_filechooser_font, 0)
        return super().__init__(*args)

    def update_filechooser_font(self, *args):
        fc = self.ids['filechooser']
        fc.bind(on_entry_added=self.update_file_list_entry)
        fc.bind(on_subentry_to_entry=self.update_file_list_entry)    

    def update_file_list_entry(self, file_chooser, file_list_entry, *args):
        file_list_entry.ids['filename'].font_name = 'DejaVuSans.ttf'


class MyApp(App):
    def build(self):
        return MyWidget()


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

关于python - 如何在kivy中制作文件选择器以支持不同语言的文件(英语,希伯来语),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54425450/

相关文章:

python - 在Python中保留大型字典会影响应用程序性能

python : How to make label bold in kivy

python - Kivy:无法引用 .kv 文件属性

python - 如何向 Sentry 报告当前登录的用户?

具有相对路径的 Python3 importlib.util.spec_from_file_location?

python - 在 kivy 小部件中访问父对象的大小参数

python - 单击按钮后如何更改 pos_hint 的值?

python - 在kivy游戏中创建多个敌人

python - 扫描字符串文字错误时 EOL

python - 如何设置字体大小或标签大小以适合所有设备