Python GUI:Tkinter——2


续上文: Python GUI:Tkinter——1

加入 Padding

所谓 Padding,就是棉片,哦不,空间的意思。通过控件的 .grid_configure接口,可以设置控件在 x,y轴方向上的间隔

大家可以接着Python GUI:Tkinter——1,在下面添加代码

aLabelFrame.grid_configure(padx=10,pady=40)    #.grid_configure 接口可以设置 grid 排版格式
for child in aLabelFrame.winfo_children():    #遍历 Frame 下的所有控件
	child.grid_configure(padx=8,pady=4)

效果如下,可以看到,aLabel 中的(子)控件的间隔变宽了,从而使得整个界面的排版变得小清新起来。
在这里插入图片描述

Frames within win

上一篇文章最后讨论了,若某个控件占用的长度过长,则会导致一整列都变长,进而导致界面排版混乱。如何解决呢?就是把控件的 Master,从 win 中改为某个 Frame。 注意,Frame 可以是 LabelFrame 也可以直接是 Frame。前者有一个 Label 作为“标题”,后者没有。

用 Frame 取代 win

用 Frame 取代 win 有什么作用呢?

  • 便于遍历控制 Frame 中的所有控件
  • 有利于改善 GUI 界面的整体视觉效果

大家可以接着Python GUI:Tkinter——1,在下面添加代码

"""在 win 下面加入下面的代码"""
bLabelFrame = ttk.LabelFrame(win,text='Python GUI')
bLabelFrame.grid(column=0,row=0)

把所有的控件的 Master 改为这个 Frame,即 bLabelFrame

这样做有什么好处呢?一是可以通过 .winfo_children() 来遍历 bLabelFrame 下面的控件,然后只要修改子控件就可以修改每个控件的间隔,比如:

for child in bLabelFrame.winfo_children():
    child.grid_configure(sticky='W')

其中 sticky=‘W’ 等价于 tk.w,要记住,sticky 的英文是粘的意思,不是对其。所以,如果令 sticky='WSNE',则让控件占满整个空间。

改善 GUI 界面的整体视觉效果

如果某个控件占用了很多空间,那么与之同列的控件就会收到影响。因此,不能像上面那样,把所有控件放到一个Frame里。如果一个控件占用的空间太大,可以把他装到另一个 Frame 里,然后再把这个Frame 放入到 win 上。于是,就变成了 win 中有两个 Frames,每个 Frame 分配不同的空间。于是,某一个 Frame 的列宽度或列数,就不会影响另一个 Frame 的宽度和列数。

添加 Menus

效果图:

在这里插入图片描述

实现代码

大家可以接着Python GUI:Tkinter——1,在下面添加代码。

from tkinter import Menu
menuBar = Menu(win)    #示例话一个 Menu,Master 为 win。
"""思考一下,Master可以为 Frame 吗?评论区评论一下试试?"""
win.configure(menu=menuBar)    #注意是 menu 参数

fileMenu = Menu(menuBar,tearoff=0)    # tearoff 参数如果不设置,就会发现多出一条横线
"""提问: 你觉得这里的 menuBar 是父类,还是某个参数?在评论区回答一下吧/(ㄒoㄒ)/~~"""
fileMenu.add_command(label='New')    #add_command 用来添加 menu 的“项”
"""嵌套"""
subFileMenu = Menu(fileMenu,tearoff=0)    # 这个是 Menu 中的 Menu 了,可以一直这样嵌套下去
subFileMenu.add_command(label='Save')
subFileMenu.add_command(label='Save as')
fileMenu.add_cascade(label='Save as',menu=subFileMenu)
"""嵌套结束"""
fileMenu.add_separator()    #给菜单“项”加一条横线

from sys import exit
def _quit():    #设置一个 menu 菜单项的激活函数
    win.quit()    #退出
    win.destroy()   #销毁
    exit()   #结束程序

fileMenu.add_command(label='Exit',command=_quit)    #command参数设置激活函数,即退出。激活函数的定义同样要放在
#前面,这是因为 tk 控件是 callback 的缘故
menuBar.add_cascade(label='File',menu=fileMenu)    #将fileMenu 添加进 menuBar,这样才会显示出来

helpMenu = Menu(menuBar,tearoff=0)
helpMenu.add_command(label='About')
menuBar.add_cascade(
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zhuo木鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值