我正在使用 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/