第11章 Tkinter 概述

python自带的GUI(Graphics User Interface)库是tkinter,其它可选的其它GUI库有:

  1. PyGObject 支持GTK+3 图形界面工具集
  2. PyQt 支持Qt库,可跨Unix,Windows,Mac OS X平台使用
  3. wxPython 可跨Unix,Windows,Mac OS X平台使用,根据平台显示对应的风格

# tkinter库中的类

继承的父类
Tk Wm, Misc
Topleve Wm, BaseWidget
BaseWidget Wm
Widget BaseWidget,Pack,Place,Grid

创建组件

所有组件均由Widget类派生,创建组件时,需要指定组件所属容器

分类 组件名称 说明
容器 Toplevel 顶层
Frame 容器
LabelFrame 可加标题的容器
PanedWindow 分区容器
菜单 Menu
Menubutton 下拉式、层叠式菜单
OptionMenu 通过按钮打开菜单
选择器 Radiobutton 单选钮
Checkbutton 复选框
Spinbox 微调选择器,通过箭头选择值
Entry 单行输入框
Text 多行文本框
Listbox 列表框
Message 消息框,类似多行文本的标签
其它 Label 标签,显示不可编辑的文本或图标
Button 按钮
Canvas 画布,提供绘图功能
from tkinter import *            #加载tkinter中所有类
root = Tk()                      #创建窗口对象
root.title('窗口标题')            #设置标题
a = Label(root, text='Hello')    #创建组件,指定容器root
a.pack()                         #布局组件
root.mainloop()                  #启动主窗口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uBLy4t2b-1639961833232)(data:image/png;base64,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)]

布局组件

pack

默认值:fill = NONE,expand = 0,side = TOP,anchor = CENTER

关键字 作用
padx, pady 与其它组件在X Y方向上的间距 pixel
ipadx, ipady 组件内部,在X Y方向上的留白 pixel
fill 组件在X Y方向上填充容器 NONE, X, Y, BOTH
expand 组件是否随容器拉伸 bool值
side 组件在容器的哪一侧(黑色区域) TOP BOTTOM LEFT RIGHT
anchor 组件在容器一侧中的定位(灰色区域) CENTER N E S W NW NE SW SE

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cjJ2jMYf-1639961833233)(data:image/png;base64,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)]

grid

按照行、列的方式排列组件,自动设置网格大小

批量创建同类型组件时,可以通过整除确定行号(商)、列号(余数)

关键字 作用
padx, pady 在X Y方向上的外间距 pixel
ipadx, ipady 在X Y方向上的内间距 pixel
row, column 行号、列号 N
rowspan, columnspan 横跨行数、横跨列数 N
sticky 内容在风格中的定位 CENTER N E S W NW NE SW SE
L = [1,2,3,4,5,6,7,8,9,'+','-','=']
win = Tk()
for i in range(len(L)):  Label(win, text=L[i]).grid(row=i//3, column=i%3)
win.mainloop()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hIwQ2nRx-1639961833234)(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKQAAACXCAYAAACbW/BCAAAXKUlEQVR4Ae1dDXAc1X3/3Zd0kmxzxjK2sYEgG4wFxVTYZzCmIQmSh5p0alN1piGZqlMmY4UGNDSGKDTgyYwjqNtEQFN50mlGmaZNBjF1h0TEttoCnQRi2RVODKa2sbDxBwZ/nb/1cR+d/+69vXd7u7dv7/akk/Vfj7y7b//v/37vt797X7vvrW/3odMpSNtfPNQknfEhM1AaBo4fP454PI6+7XuyEgj6fD4toGVNI6ZNm4YNGzagvr4e8+bNyzLkE2bASwYSiQQ+PBXDfV/6MoZ378QbO/dq7n3vfRRL/fma+/Hwww+jubkZv9h10st02RczkJeB5SsW4v1jn+DR+6J4c+c+aCUklYwkxt5dp+CDXmLm9cIXmQGPGHj7V/twy/IFCP9BI6i29i1ZsiRF1fTB+GyPkmA3zIB7BmYumY+vLV6AIEWlNuOh3Wfce+EYzIBHDMThQzAY1AVZW1sLny/mkWt2wwy4ZyCeTGH27Nm6IMPhMPzp3rZ7VxyDGSiegdH04KNWZZM71mPxpLKHwhmwEKS/cG8ckxkokoHRlD66wyoskkiO7i0DRpXtrVvd27nYaezf8x7OninPHvxV06fjpvpbMS1ytQZ4ouH1nTyG/+p6Acfef68Ut69on9cuuhVfaH0cqdprlX2VVJDv7tyJP/nifbj5pjplQGNpuG//IF75+RtYfr/+/H6i4d28vh2PfuOrWH73s2NJm3Jab739Dn6wvh1//A8/Vo5jCLIUvey9u7fjhx/tQPXUWnz18W8qgxorQ/qhjIxsNUYYRkaGtR/PkZMXxwqCq3TMeC+cPoW7ly3GxT27XPkZK2PC9vzpUwa/+dIdTerdbEOQ+YwLuZaIx3HTwhsQr12KxME3kU6vEFcli5NK0ehC5lEpHVNYOWIlEsx4tbBEEslEQuNIygogvcNFh+JaUsqcyLnPr+ebnIgwPT3hxIdU2qHf7wPSHRD40te1BDQI2ekmkulA9Z3ngtzySjdSl0/g9juX4LcXb8Ns3wXMCASITnVUY2gp34DMsRrW13/Zi907dxSM9veWLMXnHljlKn4Gox4tmYgjFY9rJzmohXFKZ79373Fs2f9JVnqfu2E6Hlw0B6FgUPtxkuhp6913HFv2mWw/Mx1fvOVazTbLielE4CBsbjdPBfnOb17H/t1vY83aZ/D+wQsALqDi0iEsumMJklm/PbcwS2OvESeKDkqCSkhAGSuJ8eWfdhUM7k//rBWffeBB5fg5eOlnnkggGR/VfQglULgPRgFGF1OplCZGM17CcGloGGvq56IyFNQ4eG3/p9g2eDInb2QbvaYKsyJXadWw0LuWuHySxkHY3G6GIOWqy60TsqcMb3vlR2h7+jn8sO84Ks/vBabehNMf7sDiR75cluVjit5tojdM0qIUe+m+OlJB+S5miyfiCASM2+DoSsZLxsl4HMkRXZCiJtWcyIrUSkhrnCRQEloqdRh/dPMsvHH4HP7z0JkcMQpgZ8+fx4yaKgT9fqOI0T3risxU7jo2iid4FT6s9jkD41ZGbsL27PoNlq24Bz/79UnUJE7g0tA5XDryKmbNqEBluNqNq3G1JXLdvIJXrCBHh0cQrA4p5Zl+QFZbQlSNOnjNhCyFBOk4meeHI0SZSBzD/54atRUjOaa+QWo0jiQJMg1HpCOwiaalOHezV/9pOnh99Sf/iL/8qyewZ8coPnnrx5hx9+OoCk7FnNpzDjEn9uVkMtNw/9JXvu6YmX/7l5eybAwxZYWW5uTeOTVaaWiutik1IUqra3SdStHbpgHhUEipxCs0B54IMnb6BL713EvYuuM4jv33t3DNisfhC4ZwtP9neHn7OzhUpsMohZImxzOXkI1rHkJA68TJVvrxlp6XtaZN7pXSh1C1+UDd1RgeHc0rSiskQozRmWHMmFJjU05bxXQfZghS6867j6/F2P7GazgSuB3B8wdw1awF8IVqtPCbb12KE6fPYt/gcSXP/7fjVzi8L3vSj1LEtNF1N9fjlqUrlKNU+2drv3aRd7ppJ0+fw15FvJSQXELS+ZlLCVSGK2wxmO33HzyG6prztvbyhSoTXrp2cs9v8eG//6tsZntMVeuiZBJnKubZitIcmcR43elBXHPwIC6FQzgSDBhVtdnWfH5jRaUWJPg1X5fPR9L1viFIlYan7EA+3v/uTiQX3orkh/2onLdMu1TtH0bdogbZzPGYxGhXZThGTlcrbgQpfBaTd7PAKsNVqK6ZKlzn7M32OQYKAYXipSZfyO/HXcNHkDyX0kT5gxe/Y5vio489g3mnB1F39kPUhkOY4kKMslMVvPF0y8cQpN9X+HsWfqSQ9AGnPj6ImTc1a1gu7++Fv+EeGZfSMU2NLGajQWK/TZVp57eYvJ8/r1a6ibTd2ot48r4YvCTK3VOux4Hq6/FS5/qcEl5Oh65/vW09gn4f5g4fyR41lw0djlXwelZCppJJjIyOIBIaxsXILG0ca6ovhsMfHwDgXpCxWHFvro+ODqMy4K5Xr/ILtuPcbYnn1t4q3WLw7qy6Druqr8ML33smrxhFumT3+BPfQeisD8tHjmglbLpzLUwc9yp44zlVdoEF5Ouv9WDFPcuwfdcvMXXu7aCSN3nmAFY+9BUMDWn6VHqWKXJ1+fJlcVjQnn4gqs/lxbCFXDlQmEqbR4Cj+cXy9uv/+Kl8mnNstqe0VNMTN1bGSwkE0m01begxnSLd34xw6HEf0F8xB+9UzsH3Nj4NMw6K9sS6Ddo1M2iyp2u+CwGsSBzXRCnbaLjyDCuZ8cpxxfFIOn7RVXb94mX40ff/BidPnsLcO2/GlORJnPloAPc++jX0/eJVkZ7Snjolf/3kd5VsrYymz1Z/zUmOr1KlyPbysXxj/+75dvmS5bFsb2mgEFgIXhLoQOUcEEarUvobT3XgutghTX

<think>我们遇到了一个具体的问题:在Tkinter中,当字体大小超过14时,中文字符显示为方框。这通常是因为字体在较大尺寸时没有正确配置,或者系统没有可用的合适字体。 解决方案思路: 1. 明确指定一个支持中文的字体,并且确保该字体在系统中存在,同时指定足够大的字号。 2. 对于Tkinter,我们可以通过`font.Font`或`font.Font`来创建字体对象,并指定字体族(family)和大小(size)。 3. 如果指定了字体族,但该字体族不支持中文,或者系统没有该字体,则可能回退到默认字体,而默认字体可能不支持中文。 根据引用[3]中的提示,在matplotlib中解决中文显示问题是通过设置中文字体(如黑体)来实现的。同样,在Tkinter中,我们也需要明确设置支持中文的字体。 具体步骤: 1. 导入`tkinter.font`模块,使用`font.Font`来创建字体。 2. 选择一个系统中存在的中文字体,例如在Windows上可以使用“Microsoft YaHei”(微软雅黑)、“SimHei”(黑体)、“KaiTi”(楷体)等;在Linux上可以使用“WenQuanYi Micro Hei”等;在macOS上可以使用“PingFang SC”等。 3. 如果担心字体不存在,我们可以提供一个字体列表,尝试多种字体直到成功。 但是,Tkinter并没有直接提供字体回退机制,因此我们需要通过尝试或检查系统字体来确保。 另外,有用户反馈在字体大小较大时(如超过14)出现方框,这可能是由于默认字体在较大尺寸时没有中文字形。因此,我们直接指定一个支持中文的字体,并设置较大的字号。 以下是一个示例代码,我们将创建一个窗口,使用24号字体显示中文,以验证问题是否解决。 注意:如果系统中没有指定的字体,那么我们需要尝试其他字体。我们可以通过`tkinter.font.families()`来获取系统所有可用字体,然后选择其中一个中文字体。 但是,为了代码的简洁,我们直接指定几种常见的中文字体,并尝试创建。如果创建失败(实际上,Tkinter在指定不存在的字体时不会报错,而是会使用默认字体),我们可以通过检查系统字体列表来选择一个中文字体。 下面我们编写代码,首先尝试使用微软雅黑,如果没有则使用黑体,再没有则使用宋体,最后如果都没有,则尝试从系统字体中查找第一个支持中文的字体。 同时,我们添加高DPI支持(针对Windows系统),以避免在高分辨率下界面模糊。 代码实现:</think># 解决 Tkinter 中文显示问题:字体大小超过14时显示方框的解决方案 ## 问题分析 当 Tkinter 中文字体大小超过14时出现方框的问题,通常是由于以下原因: 1. **默认字体不支持中文**:Tkinter 默认字体在较大字号时无法正确渲染中文字符 2. **字体文件缺失**:系统缺少支持中文的完整字体文件 3. **DPI 缩放问题**:在高分辨率屏幕上,字体缩放可能导致渲染问题 ## 完整解决方案 ```python import tkinter as tk from tkinter import font import platform import ctypes # 创建主窗口 root = tk.Tk() root.title("Tkinter 中文显示解决方案") root.geometry("800x600") # 高DPI支持(Windows系统) if platform.system() == "Windows": try: ctypes.windll.shcore.SetProcessDpiAwareness(1) except: pass # 获取系统所有可用字体 all_fonts = list(font.families()) # 推荐的中文字体列表(按优先级排序) chinese_fonts = [ "Microsoft YaHei", # Windows 微软雅黑 "SimHei", # Windows 黑体 "KaiTi", # Windows 楷体 "PingFang SC", # macOS 苹方 "Heiti SC", # macOS 黑体 "WenQuanYi Micro Hei", # Linux 文泉驿微米黑 "Noto Sans CJK SC", # 思源黑体 "FangSong", # 仿宋 "STSong", # 华文宋体 "SimSun" # 宋体 ] # 选择可用的中文字体 selected_font = None for font_name in chinese_fonts: if font_name in all_fonts: selected_font = font_name break # 如果没有找到任何中文字体,使用默认字体 if not selected_font: selected_font = "TkDefaultFont" # 创建不同大小的字体对象 small_font = font.Font(family=selected_font, size=12) medium_font = font.Font(family=selected_font, size=18) large_font = font.Font(family=selected_font, size=24) xlarge_font = font.Font(family=selected_font, size=36) # 创建内容框架 content_frame = tk.Frame(root, padx=20, pady=20) content_frame.pack(expand=True, fill=tk.BOTH) # 标题 title_label = tk.Label( content_frame, text="Tkinter 中文显示解决方案", font=xlarge_font, fg="#1E3A8A", pady=20 ) title_label.pack() # 问题描述 problem_label = tk.Label( content_frame, text="问题:当字体大小超过14时,中文显示为方框 □□□", font=medium_font, fg="#B91C1C", pady=10 ) problem_label.pack() # 解决方案标题 solution_title = tk.Label( content_frame, text="解决方案:", font=medium_font, fg="#047857", pady=10, anchor="w" ) solution_title.pack(fill=tk.X) # 解决方案步骤 steps = [ "1. 明确指定支持中文的字体(如微软雅黑、宋体等)", "2. 创建字体对象时同时指定字体家族和大小", f"3. 当前使用的字体: {selected_font}", "4. 添加高DPI支持以适应不同分辨率屏幕" ] for step in steps: step_label = tk.Label( content_frame, text=step, font=small_font, fg="#374151", anchor="w", padx=20 ) step_label.pack(fill=tk.X) # 不同字体大小测试 test_frame = tk.Frame(content_frame, pady=20) test_frame.pack(fill=tk.X) test_label = tk.Label( test_frame, text="中文大小测试:", font=medium_font, fg="#1D4ED8" ) test_label.pack(anchor="w") # 小号字体测试 small_test = tk.Label( test_frame, text="小号字体 (12pt): 你好,世界!", font=small_font, fg="#4B5563", padx=20 ) small_test.pack(anchor="w") # 中号字体测试 medium_test = tk.Label( test_frame, text="中号字体 (18pt): 你好,世界!", font=medium_font, fg="#4B5563", padx=20 ) medium_test.pack(anchor="w") # 大号字体测试 large_test = tk.Label( test_frame, text="大号字体 (24pt): 你好,世界!", font=large_font, fg="#4B5563", padx=20 ) large_test.pack(anchor="w") # 超大号字体测试 xlarge_test = tk.Label( test_frame, text="超大号字体 (36pt): 你好,世界!", font=xlarge_font, fg="#4B5563", padx=20 ) xlarge_test.pack(anchor="w") # 系统信息 system_info = tk.Label( content_frame, text=f"操作系统: {platform.system()} {platform.release()} | Python版本: {platform.python_version()}", font=("TkDefaultFont", 9), fg="#6B7280", pady=10 ) system_info.pack(side=tk.BOTTOM) # 启动主循环 root.mainloop() ``` ## 解决方案关键点 ### 1. 字体选择与回退机制 ```python # 推荐的中文字体列表(按优先级排序) chinese_fonts = [ "Microsoft YaHei", # Windows "SimHei", # Windows "PingFang SC", # macOS "WenQuanYi Micro Hei", # Linux "Noto Sans CJK SC" # 跨平台 ] # 选择可用的中文字体 selected_font = None for font_name in chinese_fonts: if font_name in font.families(): selected_font = font_name break ``` ### 2. 明确指定字体对象 ```python # 创建不同大小的字体对象时明确指定字体家族 large_font = font.Font(family=selected_font, size=24) xlarge_font = font.Font(family=selected_font, size=36) ``` ### 3. 高DPI支持(Windows系统) ```python # 高DPI支持(Windows系统) if platform.system() == "Windows": ctypes.windll.shcore.SetProcessDpiAwareness(1) ``` ### 4. 字体回退机制 ```python # 如果没有找到任何中文字体,使用默认字体 if not selected_font: selected_font = "TkDefaultFont" ``` ## 常见问题及解决方法 1. **所有字体都显示为方框**: - 确保系统安装了中文字体 - 尝试安装开源字体如"WenQuanYi Micro Hei"或"Noto Sans CJK SC" - 在代码中添加字体文件路径: ```python # 添加自定义字体路径 from tkinter import font custom_font = font.Font(family="MyCustomFont", size=24) font.nametofont("TkDefaultFont").actual() # 检查实际使用的字体 ``` 2. **Linux系统显示问题**: ```bash # 安装中文字体 sudo apt install fonts-wqy-microhei ``` 3. **macOS系统显示问题**: - 确保安装了"PingFang SC"或"Hiragino Sans GB"字体 ## 效果验证 运行上述代码后,你将看到: 1. 标题使用超大号字体(36pt)显示中文 2. 不同大小的字体测试(12pt, 18pt, 24pt, 36pt) 3. 当前使用的字体信息 4. 系统环境信息 所有中文文本应清晰显示,无方框问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ailsa2019

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值