棋子Unicode tkinter字体问题

时间:2018-04-17 09:52:40

标签: python tkinter unicode chess

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

编辑:使用等宽字体

会更方便

2 个答案:

答案 0 :(得分:0)

使用:

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

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

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

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

答案 1 :(得分:0)

问题可能是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()

enter image description here