python tkinter pack布局遇到的错误和问题总结(无图)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python tkinter pack布局遇到的错误和问题总结(无图),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2976字,纯文字阅读大概需要5分钟。
内容图文
![python tkinter pack布局遇到的错误和问题总结(无图)](/upload/InfoBanner/zyjiaocheng/622/d4f74f9c9f4d4614b00ebff909474d5d.jpg)
综述:不论哪种布局管理器,都要清楚的概念是相对位置。它的好处是窗口是随时都可变的,如果由相对位置来定位控件会比较方便。
体现在padx,pady,ipadx,ipady(pack,grid都有)和grid的对齐stick属性等等方面。
tkinter读python官方文档学不到什么(感觉里面内容是缩水的)
推荐的网站:https://tkdocs.com/tutorial/index.html
1.pack中关于expand,side,fill组合时的使用:
fill--设置控件填满所分配空间的方向
expand--设置是否填满额外的父容器空间
一个特殊的案例:
·误区:有fill一定要有expand吗?
from tkinter import *
root = Tk()
root.geometry("500x500+500+150")
Frame(root, bg='Blue', height=200,).pack(side=TOP, fill=X, expand=1)
root.mainloop()
以上的高度和窗口的大小单位都是像素,所以Frame比root要小,但结果是由于expand的干扰,
Frame没有做到side=TOP,如果不写expand=1就会正确,所以当时看csdn的帖子有人说expand会使side“无效”。
但如果去测试对多个控件都设置同样的side=TOP,fill=X,和expand=1,会发现side仍在发挥作用。所以也不是完全的无效。
真实失效的是expand=1,它的存在不会影响到fill的行动,由于没有设置那个方向的起始大小,而是fill完全填充了那个方向。
·逻辑类错误:
fill的方向与设置同方向的属性冲突:
Frame(root, bg='Blue', height=30, width=30).pack(side=TOP, fill=X, )
结果:width失效,后面的语句fill起效
缺少某一个方向属性的设置:
Frame(root, bg='Blue', height=30, ).pack(side=TOP, fill=Y, )
结果:该方向的默认值为1,单位是像素(几乎看不到)
·side的“锁定”效果:
基于上面的逻辑类错误1,如果写成:
Frame(root, bg='Blue', height=30, width=30).pack(side=TOP, fill=Y, )
结果:fill=Y失效了,与我分析的“pack是后面的语句,后执行,覆盖之前的影响”的理论矛盾了。故得出side会“锁定”这个方向。
·height,width等属性错误:
很多控件都有height,width,padx等等属性,但是它们单位可能不同,一是字符Label['height']=1是可行的,但是如果Frame['height']=1,
你很容易认为没有看到Frame控件,因为它单位是像素。
2.常见赋值错误
l1 = Label(text='1',bg='Blue').pack()
此时l1为NoneType,想用变量就得把设置和pack分开写。
3.三种布局管理器可以混用吗?
不同种布局管理器作用在同一个父容器中会冲突(混用失败)
在对一个父容器是root的控件使用gird之后,又对一个父容器为root的控件使用pack会报以下的错。
_tkinter.TclError: cannot use geometry manager pack inside . which already has slaves managed by grid
而且两者单独显示的时候是在窗口的两个互不重合的位置,说明每种管理器是抢着控制根窗口root的。那么可以在两个不同的父容器之间,用不同的布局方法吗?
不同种管理器可以应用到不同的父容器里(混用成功)
f2 = Frame(root, bg='Red',height=200,width=300)
f2.pack(anchor='ne')
Label(f2, text='1', bg='Green', height=20, width=20).grid(row=0, column=0)
Label(f2, text='2', bg='Blue', height=20, width=20).grid(row=0, column=1)
print('height=', f2.cget('height'), 'width=', f2.cget('width'))
因为根窗口也只是一个容器罢了,它可以应用三种布局中的一种,那么其他容器也可以这么使用。
但要注意的是,在这个容器里的所有控件的布局管理选择是要一致的,否则会报错。
比如:在一个LabelFrame里有三个控件(它自己是用的pack),两个用gird,另一个用pack。
gird会报错说它的父容器已经使用pack了。但错误不在他这里。而在那个pack控件里。
内容总结
以上是互联网集市为您收集整理的python tkinter pack布局遇到的错误和问题总结(无图)全部内容,希望文章能够帮你解决python tkinter pack布局遇到的错误和问题总结(无图)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。