【问题标题】:Hebrew with tkinter - BiDi希伯来语与 tkinter - BiDi
【发布时间】:2018-04-25 06:12:05
【问题描述】:

我正在使用 tkinter 开发一个 python GUI 应用程序,它以希伯来语显示文本。

在 Windows(10、python 3.6、tkinter 8.6)上,希伯来语字符串显示良好。

在 Linux 上(Ubuntu 14,python 3.4 和 3.6,tkinter 8.6)希伯来语字符串显示不正确 - 没有 BiDi 意识 - 我错过了什么吗?

我安装了 pybidi,并通过bidi.algorithm.get_display(hebrew_string) - 字符串显示正确。
但是,在 Windows 上,get_display(hebrew_string) 显示不正确。

python-tkinter-Linux 不支持 BiDi 吗?
我必须用get_display(string) 包装每个字符串吗?
我必须用only_on_linux(...) 函数包装get_display(string) 吗?

【问题讨论】:

  • 如果您使用 Unicode 字符,它应该可以正常工作。用unicode = hebrew_string.encode("UTF-32")看看是否有效,然后显示unicode
  • 我不确定输出应该是什么。
  • 我显示了字符串 'שלום':在 Windows 上显示正确,在 Linux 上显示为 'םולש'。使用 encode() 我得到垃圾,使用 print() 我得到: b'\xff\xfe\x00\x00\xe9\x05\x00\x00\xdc\x05\x00\x00\xd5\x05\x00\x00 \xdd\x05\x00\x00'

标签: python-3.x tkinter hebrew bidi


【解决方案1】:

我搜索了一下,tk/tcl 自 2011 年左右开始使用 Windows bidi 支持是一个已知问题,但它们在 linux 上显然没有任何等价物。示例:https://wiki.tcl.tk/3158Python/Tkinter: Using Tkinter for RTL (right-to-left) languages like Arabic/Hebrew? 的一个答案有一些针对 *nix 的解决方法。我不确定最新的 tcl/tk 是否支持 Mac。

对于跨平台工作,您需要一个在 Windows 上回显并在 Ubuntu 上反转的函数。

【讨论】:

    【解决方案2】:

    作为 FriBidi 的主要作者和 Gtk 中双向文本支持的贡献者,我强烈建议您不要将 TkInter 用于任何希伯来语或拉丁语、希腊语或西里尔字母以外的任何其他文本。理论上,您可以使用 Linux 上的独立 fribidi 可执行文件重新排列文本顺序,或者使用 fribidi 绑定,但对 bidi 和复杂语言的支持远不止于此。您可能需要支持文本插入、剪切和粘贴、整形,仅举几个陷阱。你最好使用优秀的 gtk 或 Qt 绑定到 python。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 2015-05-26
      • 2012-10-05
      相关资源
      最近更新 更多