Tkinter中Frame内标签对齐及布局、图标添加相关问题
复刻PyCharm启动界面的Tkinter问题解决方案
问题1:无需额外Frame,在版本标签和项目操作标签间添加空白间隔
不用新建Frame,直接通过以下两种方式实现:
- 给版本标签的
pack方法设置底部内边距,让它和下方内容拉开距离:Label(root,text='Version 2019.3.4',bg="White",fg="Black",font="Verdana 9").pack(pady=(0, 35)) - 或者添加一个仅用于占位的空白标签:
Label(root, text='', bg="white").pack(pady=35)
问题2:让Frame内的三个项目操作标签右对齐
给Frame里的每个Label在pack时设置anchor='e'(代表右对齐),同时加上fill='x'让标签占满Frame的宽度,确保内容始终贴右侧:
Label(frame,text='+Create New Project',bg="White",fg="Black",font="Verdana 9").pack(fill='x', anchor='e', pady=2) Label(frame,text='Open',bg="White",fg="Black",font="Verdana 9").pack(fill='x', anchor='e', pady=2) Label(frame,text='Get From Version Control',bg="White",fg="Black",font="Verdana 9").pack(fill='x', anchor='e', pady=2)
如果想让标签和窗口右侧保持一点间距,可以给Frame本身设置padx参数:frame = Frame(root, bg="white", padx=20)
问题3:添加类似Font Awesome的图标
Tkinter原生不支持直接通过URL加载Font Awesome图标,但可以用第三方库tkfontawesome快速实现:
- 先安装库:
pip install tkfontawesome - 在代码中导入并使用,示例如下:
这个库包含了大部分Font Awesome图标,直接通过图标名称调用即可,还能自定义颜色和大小。import tkfontawesome as fa # 给标签添加图标,compound参数控制图标和文本的位置(left代表图标在文字左边) Label(frame, text='Create New Project', bg="White", fg="Black", font="Verdana 9", image=fa.icon('plus', fill='black'), compound='left').pack(fill='x', anchor='e', pady=3)
修改后的完整可运行代码
from tkinter import * import tkfontawesome as fa root = Tk() root.geometry('733x434') root.configure(bg="white") root.title("Welcome to PyCharm") Label(root, text='PC', bg="Black", fg="White", font="Verdana 15", underline=0).pack(side=TOP) Label(root, text='PyCharm Community Edition', bg="White", fg="Black", font="Verdana 12").pack() # 解决问题1:设置版本标签底部内边距 Label(root, text='Version 2019.3.4', bg="White", fg="Black", font="Verdana 9").pack(pady=(0, 35)) frame = Frame(root, bg="white", padx=20) frame.pack() # 解决问题2:右对齐+图标(问题3) Label(frame, text='Create New Project', bg="White", fg="Black", font="Verdana 9", image=fa.icon('plus', fill='black'), compound='left').pack(fill='x', anchor='e', pady=3) Label(frame, text='Open', bg="White", fg="Black", font="Verdana 9", image=fa.icon('folder-open', fill='black'), compound='left').pack(fill='x', anchor='e', pady=3) Label(frame, text='Get From Version Control', bg="White", fg="Black", font="Verdana 9", image=fa.icon('code-branch', fill='black'), compound='left').pack(fill='x', anchor='e', pady=3) bottomframe = Frame(root) bottomframe.pack(side="bottom", fill="x") Label(bottomframe, text='Get Help', bg="White", fg="Black", font="Verdana 9").pack(side=RIGHT, padx=10) Label(bottomframe, text='Configure', bg="White", fg="Black", font="Verdana 9").pack(side=RIGHT, padx=10) root.mainloop()
内容的提问来源于stack exchange,提问作者Vegeta
相关产品推荐
相关产品推荐

