tkinter模块字体(font)的使用

2019年9月27日 / 18,414次阅读 / Last Modified 2019年9月27日
tkinter

基本上tkinter中的控件,在创建的时候,都可以使用font字体参数,来控制控件上显示的字体,大小和样式。tkinter是Python的标准GUI库,支持的成熟度是最好的,编写GUI工具,应该优先选择tkinter。本文介绍tkinter模块中字体使用的相关技巧。

用tuple参数组来实现font

>>> root = tk.Tk()
>>> tk.Label(root, text='hello font', font=('microsoft yahei', 16, 'bold')).pack
>
>>> tk.Label(root, text='hello font', font=('microsoft yahei', 16, 'bold')).pack()
>>> tk.Label(root, text='hello font', font=('Times', 20, 'bold italic')).pack()
>>> tk.Label(root, text='hello font', font=('Times', 24, 'bold italic underline')).pack()
>>> tk.Label(root, text='hello font', font=('Times', 24, 'bold italic underline overstrike')).pack()
>>> tk.Label(root, text='default font').pack()

有了根窗口root后,在其上连续创建几个Label,使用不同的font测试效果,如下:

tuple创建的font参数组
tuple创建的font参数组

tuple的第1个参数是字体类型,第2个参数是字体大小,第3个参数的可选内容是:bold, italic, underline, overstrike。效果如上。注意默认的font,其实size很小,我自己的经验是8或者9,肯定比10要小。

用tkFont对象

我看网上大家都使用tkFont这个词,我也就拿来用了,对应的其实是tkinter.font这个模块。

import tkinter as tk
import tkinter.font as tkFont

root = tk.Tk()  # must be here
f1 = tkFont.Font(family='microsoft yahei', size=16, weight='bold')
f2 = tkFont.Font(family='times', size=20, slant='italic')
f3 = tkFont.Font(family='Helvetica', size=24, underline=1, overstrike=1)
tk.Label(root, text='tkFont', font=f1).pack()
tk.Label(root, text='tkFont', font=f2).pack()
tk.Label(root, text='tkFont', font=f3).pack()
tk.Label(root, text='default font').pack()
root.mainloop()

weight默认是normal,可以写bold;slant默认是roman,可以写italic;underline和overstrike的取值为0或1。

这段代码在Win系统下运行效果如下:

使用tkFont的效果
使用tkFont的效果

一个细节:这段代码要正常运行,必须要先创建root窗口。

tkFont.families()接口

tkFont.families接口可以获取当前系统所有的支持的字体类型,即所有的family参数。

>>> root = tk.Tk()
>>> tkFont.families()
('Noto Sans Mono CJK TC', 'Lohit Kannada', 'Samyak Devanagari', 'Century Schoolbook L', 'OpenSymbol', 'Khmer OS System', 'Nakula', 'Chandas', 'Keraleeyam', 'Noto Sans Mono CJK TC', 'Mukti Narrow', 'Meera', 'Kalimati', 'KacstQurn', 'Gubbi', 'Noto Sans Mono CJK SC', 'Tibetan Machine Uni', 'Umpush', 'DejaVu Sans Mono', 'Purisa', 'Pothana2000', 'Noto Serif CJK JP', 'KacstBook', 'KacstLetter', 'Noto Serif CJK KR', 'Noto Sans CJK SC', 'Norasi', 'Loma', 'Karumbi', 'KacstDigital', 'KacstTitleL', 'mry_KacstQurn', 'URW Palladio L', 'Noto Serif CJK SC', 'Noto Serif CJK TC', 'Likhan', 'Padauk Book', 'Phetsarath OT', 'Sawasdee', 'Sahadeva', 'Noto Sans CJK TC', 'Tlwg Typist', 'Tlwg Typewriter', 'Samyak Tamil', 'Noto Sans CJK KR', 'URW Gothic L', 'Dingbats', 'URW Chancery L', 'Ubuntu', 'Noto Sans CJK JP', 'Noto Sans CJK SC', 'Chilanka', 'FreeSerif', 'Lohit Assamese', 'Padauk', 'AnjaliOldLipi', 'Ubuntu Condensed', 'Samyak Gujarati', 'ori1Uni', 'KacstOffice', 'DejaVu Sans', 'Kinnari', 'KacstArt', 'Lohit Odia', 'Tlwg Mono', 'aakar', 'Bitstream Charter', 'KacstOne', 'Mitra Mono', 'Kalapi', 'Khmer OS', 'Courier 10 Pitch', 'Laksaman', 'Liberation Sans Narrow', 'Liberation Mono', 'Nimbus Sans L', 'padmaa-Bold.1.1', 'Manjari', 'Noto Sans CJK TC', 'Ani', 'Rachana', 'Pagul', 'Lohit Telugu', 'Lohit Tamil Classical', 'Samanata', 'Droid Sans Fallback', 'Vemana2000', 'Standard Symbols L', 'Lohit Gujarati', 'KacstPen', 'RaghuMalayalam', 'KacstDecorative', 'Nimbus Mono L', 'Liberation Serif', 'Manjari', 'Lohit Malayalam', 'LKLUG', 'Noto Sans Mono CJK SC', 'Nimbus Roman No9 L', 'Ubuntu', 'KacstPoster', 'Liberation Sans', 'Manjari', 'Mukti Narrow', 'FreeSans', 'Noto Sans Mono CJK JP', 'Sarai', 'Lohit Devanagari', 'Noto Color Emoji', 'Uroob', 'Noto Mono', 'KacstNaskh', 'Dyuthi', 'Lohit Tamil', 'Tlwg Typo', 'Noto Sans CJK JP', 'KacstFarsi', 'Suruma', 'Lohit Bengali', 'Abyssinica SIL', 'Jamrul', 'Noto Sans Mono CJK KR', 'Waree', 'KacstTitle', 'padmaa', 'DejaVu Serif', 'Saab', 'Noto Sans CJK KR', 'Navilu', 'Gargi', 'Noto Sans Mono CJK KR', 'Garuda', 'Samyak Malayalam', 'Rekha', 'KacstScreen', 'Lohit Gurmukhi', 'FreeMono', 'Ubuntu Mono', 'URW Bookman L', 'Noto Sans Mono CJK JP')

返回的tuple里面,包含了系统所有支持的字体。显示代码记得使用等宽(monospace)字体哦。

获取字符串占用的像素宽度

tkFont对象有一个方法measure,可以获取字符串参数的像素宽度,也许有的事情,这个信息是有用的,方法如下:

import tkinter as tk
import tkinter.font as tkFont

root = tk.Tk()
f1 = tkFont.Font(family='microsoft yahei', size=16, weight='bold')
f2 = tkFont.Font(family='times', size=16, slant='italic')
f3 = tkFont.Font(family='Helvetica', size=16, underline=1, overstrike=1)
tk.Label(root, text='tkFont', font=f1).pack()
tk.Label(root, text=f1.measure('tkFont'), font=f1).pack()
tk.Label(root, text='tkFont', font=f2).pack()
tk.Label(root, text=f2.measure('tkFont'), font=f1).pack()
tk.Label(root, text='tkFont', font=f3).pack()
tk.Label(root, text=f3.measure('tkFont'), font=f1).pack()
tk.Label(root, text='default font').pack()
root.mainloop()

运行结果:

tkFont对象获取字符串像素宽度
tkFont对象获取字符串像素宽度

虽然这几个tkFont对象的size都是16,但是不同字体,不同效果,measure的结果还是不太一样。

以上就是对tkinter模块font部分使用的介绍。

-- EOF --

本文链接:https://www.pynote.net/archives/1220

留言区

您的电子邮箱地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

More

麦新杰的Python笔记

Ctrl+D 收藏本页


©Copyright 麦新杰 Since 2019 Python笔记

go to top