国际象棋棋子 Unicode tkinter 字体问题

Chess pieces Unicode tkinter font issues

我正在 Python 3 中使用 tkinter windows 开发基于国际象棋的游戏。我正在为棋子使用 Unicode 字符。但是,它们有两种不同的外观(如此处所示:https://en.wikipedia.org/wiki/Chess_symbols_in_Unicode)。我想用最上面的,但是无论我用什么字体,都出现丑陋的底部版本。我做错了什么?

编辑:使用等宽字体会更方便

使用:

Label(win, text='\u2654', font='Courier 96')

提供了一个非常漂亮的白王图标(与您的维基百科中的相同 link)

要查看您的系统中是否存在该角色,您可以创建以下HTML文件test.html,然后用浏览器打开它查看如果它显示正确的图标:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<html><body>
<h1>&#9812;&#9813;</h1>
</body></html>

问题可能是 tkinter 找不到您指定的字体,或者您指定的字体没有 unicode 字形,所以它替换为具有字形的字体。

这是一个小程序,可以显示您系统上的所有字体,以及棋子的样子:

import sys
if sys.version_info.major is 3:
    import tkinter as tk, tkinter.font as tkFont
else:
    import Tkinter as tk, tkFont

root = tk.Tk()
text = tk.Text(root, tabs=(200,))
vsb = tk.Scrollbar(root, command=text.yview)
text.configure(yscrollcommand=vsb.set)
vsb.pack(side="right", fill="y")
text.pack(side="left", fill="both", expand=True)

pieces = u"\u2654\u2655\u2656\u2657\u2658\u2659\u265A\u265B\u265C\u265D\u265E\u265F\n"
for count, family in enumerate(sorted(tkFont.families())):
    font = tkFont.Font(family=family, size=18)
    tag = "font-%s" % count
    text.tag_configure((tag,), font=font)
    text.insert("end", family)
    text.insert("end", "\t" + pieces, tag)

root.mainloop()