python----tkinterm模块
正文
布局
一、pack()
pack()有以下几个常用属性:
- side
- padx
- pady
- ipadx
- ipady
- fill
- expand
1,side
side属性有四个可选值:'top'、'bottom'、'left'、'right',分别表示将控件位置设在窗口顶部中心、底部中心、左边中心、右边中心。side默认值为'top'。
2,padx、pady、ipadx、ipady
这四个属性分别设置控件水平方向外边距、竖直方向外边距、水平方向内边距、竖直方向内边距。
3,fill
fill属性有四个可选值:'none'、'x'、'y'、'both'。分别表示不填充、将控件沿水平方向填充、将控件沿竖直方向填充、将控件沿水平和竖直方法填充。
当side属性被设为'top'、'bottom'时,fill只能沿水平方向填充;当side属性被设为'left'、'right'时,fill只能沿竖直方向填充。
4,expand
expand属性有两个可选值:0、1(或者'yes'、'no')。expand默认值为0。
当expand属性为0时,前面所说的side、fill一切正常;当expand属性为1时,side属性无效,此时控件会在窗口中心位置,且fill既可沿水平方向填充,也可沿竖直方向填充。
二、grid()
grid()有以下几个常用属性:
- row
- column
- padx
- pady
- ipadx
- ipady
- rowspan
- columnspan
- sticky
1,row、column
grid()将窗口看做一张表格,将控件放在其中的单元格中,而row、column则用来设置控件所在单元格的坐标。
例如:
#文件名:test.py
import tkinter as tk
window = tk.Tk()
window.title('test')
window.geometry('400x400')
btn1 = tk.Button(window,text='one',width=5,bg='green')
btn1.grid(row=0,column=0)
btn2 = tk.Button(window,text='two',width=5,height=5,bg='red')
btn2.grid(row=0,column=1)
btn3 = tk.Button(window,text='three',width=3,height=3,bg='blue')
btn3.grid(row=1,column=0)
btn4 = tk.Button(window,text='four',width=15,height=10,bg='yellow')
btn4.grid(row=1,column=1)
window.mainloop()
效果如图:
从图中我们可以看出,单元格的宽度、高度是由同一列中最宽、同一行中最高的控件的宽高决定的。
2,padx、pady、ipadx、ipady
这四个属性分别设置控件水平方向外边距、竖直方向外边距、水平方向内边距、竖直方向内边距。
3,rowspan、columnspan
有时候,一个控件可能会占用不止一个单元格,这时就要用到rowspan、columnspan,他们的作用与合并单元格类似。
rowspan=3表示该控件会在竖直方向占用3行单元格;column=3则报表时该控件会在水平方向占用3列单元格。
现在我们对test.py做些改动,让绿色按钮占用2x2个单元格:
#文件名:test.py
import tkinter as tk
window = tk.Tk()
window.title('test')
window.geometry('400x400')
btn1 = tk.Button(window,text='one',width=5,bg='green')
btn1.grid(row=0,column=0,rowspan=2,columnspan=2)
btn2 = tk.Button(window,text='two',width=5,height=5,bg='red')
btn2.grid(row=0,column=1)
btn3 = tk.Button(window,text='three',width=3,height=3,bg='blue')
btn3.grid(row=1,column=0)
btn4 = tk.Button(window,text='four',width=15,height=10,bg='yellow')
btn4.grid(row=1,column=1)
window.mainloop()
效果如图:
咦,绿色按钮怎么不见了?
要注意,这里的合并单元格和html中<table>
标签的合并单元格不同,合并单元格后,其他单元格中的控件并不会自动被挤开,因此实际上,此时绿色按钮被黄色的按钮遮挡住了,可以试着增大绿色按钮的宽高就能知道它的位置了。
既然合并单元格周围的控件不会自动被挤开,那我们就只能手动更改其坐标了。
为了便于理解,我们看张示意图:
从图中可以看出,应该将红色按钮坐标设为(0,2),蓝色按钮坐标设为(2,0),黄色按钮坐标设为(2,1)(准确地说应该是设置行和列的序号)。
改动后代码如下:
#文件名:test.py
import tkinter as tk
window = tk.Tk()
window.title('test')
window.geometry('400x400')
btn1 = tk.Button(window,text='one',width=5,bg='green')
btn1.grid(row=0,column=0,rowspan=2,columnspan=2)
btn2 = tk.Button(window,text='two',width=5,height=5,bg='red')
btn2.grid(row=0,column=2)
btn3 = tk.Button(window,text='three',width=3,height=3,bg='blue')
btn3.grid(row=2,column=0)
btn4 = tk.Button(window,text='four',width=15,height=10,bg='yellow')
btn4.grid(row=2,column=1)
window.mainloop()
效果如图:
你可能会觉得,绿色按钮并没有在竖直方向上占用两个两行单元格,前面说过,单元格的高度是由一行中最高的控件的高度决定的,而第二行中没有控件,是空的,所以高度为0。
我们在第二行添加一个灰色按钮,这样可以更清楚地看出各个按钮的位置关系:
#文件名:test.py
import tkinter as tk
window = tk.Tk()
window.title('test')
window.geometry('400x400')
btn1 = tk.Button(window,text='one',width=5,bg='green')
btn1.grid(row=0,column=0,rowspan=2,columnspan=2)
btn2 = tk.Button(window,text='two',width=5,height=5,bg='red')
btn2.grid(row=0,column=2)
btn3 = tk.Button(window,text='three',width=3,height=3,bg='blue')
btn3.grid(row=2,column=0)
btn4 = tk.Button(window,text='four',width=15,height=10,bg='yellow')
btn4.grid(row=2,column=1)
btn5 = tk.Button(window,text='five',width=15,height=4,bg='gray')
btn5.grid(row=1,column=2)
window.mainloop()
效果如图:
4,sticky
sticky属性用于设置控件的对齐方式,其可选值有'N'、'S'、'E'、'W'以及这四个值的各种组合。
当stick属性的值为这四个方向中的一个时,控件会向相应方向对齐;当stick属性的值为其中两个时,控件会向相应的一个角对齐;当stick属性的值为其中三个、四个时,控件会先向前两个设定的方向对齐,然后向后两个方向进行填充。
例如,我们将绿色按钮设为sticky='W'
时,则它会左对齐,如图所示:
当我们将绿色按钮设为sticky='W'+'N'
时,则它会左对齐+顶对齐,因此会位于单元格的左上角,如图所示:
当我们将绿色按钮设为sticky='W'+'N'+'S'
时,则它会先进行左对齐+顶对齐,然后向下填充单元格,如图所示:
当我们将绿色按钮设为sticky='W'+'N'+'S'+'E'
时,则它会先进行左对齐+顶对齐,然后向下、向右填充单元格,如图所示:
三、place()
place()有以下几个常用属性:
- x
- y
- relx
- rely
- anchor
1,x、y
x、y属性用来设置控件的绝对坐标。
2,relx、rely
relx、rely属性用来设置控件的相对坐标,范围为0-1。
可以同时使用相对坐标和绝对坐标,此时先根据相对坐标确定控件位置,然后根据绝对坐标使控件进行偏移,最后确定控件的最终位置。
3,anchor
anchor属性有9个可选值,分别表示9个方向,用来设置控件的锚点。如图所示:
例如,anchor='nw',x=100,y=100
表示控件的左上角将在坐标(100,100)处,而anchor='n',x=100,y=100
表示控件的顶边中点将在坐标(100,100)处。
四、Frame()
Frame()本身是tkinter中的一类控件,用来帮助我们进行布局。
首先我们创建四个框架,同时创建一个标签,为了方便观察,我们给框架添加了背景色和边框,如下所示:
#文件名:test'.py
import tkinter as tk
window = tk.Tk()
window.title('test window')
window.geometry('400x400')
f1 = tk.Frame(window,width=150,height=150,bg='blue',borderwidth=2)
f2 = tk.Frame(window,width=150,height=150,bg='red',borderwidth=2)
f3 = tk.Frame(window,width=150,height=150,bg='gray',borderwidth=2)
f4 = tk.Frame(window,width=150,height=150,bg='yellow',borderwidth=2)
f1.grid(row=0, column=0)
f2.grid(row=0, column=1)
f3.grid(row=1, column=0)
f4.grid(row=1, column=1)
l1 = tk.Label(window,text='one',bg='pink',width=5).grid(row=0,column=0)
window.mainloop()
效果如图:
此时的框架似乎就是一个普通的矩形控件。
接着我们将标签放入框架中,也即将框架作为标签的父对象(为了避免大段大段的重复代码影响阅读,我们使用----snip----
表示省略部分前文已使用过的重复代码。):
#文件名:test'.py
import tkinter as tk
----snip----
l1 = tk.Label(f1,text='one',bg='pink',width=5).grid(row=0,column=0)
----snip----
window.mainloop()
效果如图:
可以发现,框架的大小发生了改变,准确地说,框架大小变为了框架中控件的大小。
接着,我们再添加一个标签:
#文件名:test'.py
import tkinter as tk
----snip----
l1 = tk.Label(f1,text='one',bg='pink',width=5).grid(row=0,column=0)
l2 = tk.Label(f1,text='two',bg='pink',width=5).grid(row=1,column=1)
----snip----
window.mainloop()
效果如图:
此时,框架的大小是框架中所有控件的外接矩形的大小,也即刚好将所有控件包裹住的大小。
如果想改变框架的位置,比如使其在左上角,只需设置sticky='W'+'N'
即可。
另外再来看一种情况,我们将标签的宽度增大:
#文件名:test'.py
import tkinter as tk
----snip----
l1 = tk.Label(f1,text='one',bg='pink',width=15).grid(row=0,column=0)
l2 = tk.Label(f1,text='two',bg='pink',width=15).grid(row=1,column=1)
----snip----
window.mainloop()
效果如图:
python----tkinterm模块的更多相关文章
- Python标准模块--threading
1 模块简介 threading模块在Python1.5.2中首次引入,是低级thread模块的一个增强版.threading模块让线程使用起来更加容易,允许程序同一时间运行多个操作. 不过请注意,P ...
- Python的模块引用和查找路径
模块间相互独立相互引用是任何一种编程语言的基础能力.对于“模块”这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译型的语言,比如C#中 ...
- Python Logging模块的简单使用
前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...
- Python标准模块--logging
1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...
- python基础-模块
一.模块介绍 ...
- python 安装模块
python安装模块的方法很多,在此仅介绍一种,不需要安装其他附带的pip等,python安装完之后,配置环境变量,我由于中英文分号原因,环境变量始终没能配置成功汗. 1:下载模块的压缩文件解压到任意 ...
- python Queue模块
先看一个很简单的例子 #coding:utf8 import Queue #queue是队列的意思 q=Queue.Queue(maxsize=10) #创建一个queue对象 for i in ra ...
- python logging模块可能会令人困惑的地方
python logging模块主要是python提供的通用日志系统,使用的方法其实挺简单的,这块就不多介绍.下面主要会讲到在使用python logging模块的时候,涉及到多个python文件的调 ...
- Python引用模块和查找模块路径
模块间相互独立相互引用是任何一种编程语言的基础能力.对于"模块"这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译 ...
- Python Paramiko模块与MySQL数据库操作
Paramiko模块批量管理:通过调用ssh协议进行远程机器的批量命令执行. 要使用paramiko模块那就必须先安装这个第三方模块,仅需要在本地上安装相应的软件(python以及PyCrypto), ...
随机推荐
- 搜狗员工用百度算什么,谷歌员工当着老板的面用bing,结果悲剧了!
之前看到一篇文章,写的是搜狗的员工遇到问题时,用百度,结果网友的评论真是亮瞎眼.今天,W3Cschool小师妹将为大家分享一个类似的故事,那就是谷歌员工当着老板的面,竟然用BING. 这位谷歌员工称, ...
- 什么是Socket?简单点,通俗易懂的?
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 建立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API),对TCP/IP的封装 ...
- C/C++之Qt正则表达式
引言 正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征.比如 表达式“ab+” 描述的特征是“一个 'a' 和 任意个 ...
- Ubuntu&Linux系统出现文件系统只读Read-only file system 的快速解决方法
问题描述: 周末运行盘平台服务程序,周一来操作系统卡顿,主进程已退出,重启进程时提示Read-only file system:新建目录和其他chmod -R等等操作都提示Read-only file ...
- ABP官方文档翻译 1.6 OWIN集成
OWIN集成 安装 使用 如果在应用程序里既使用ASP.NET MVC也使用ASP.NET Web API,需要在工程里安装Abp.Owin包. 安装 添加Abp.Owin包到主工程里(一般是web工 ...
- Python3.x:pip命令安装第三方库,超时处理方案
Python3.x:pip命令安装第三方库,超时处理方案 问题: pip install splinter命令安装第三方库,报超时错误: raise ReadTimeoutError(self._po ...
- kali 安装virtualbox
安装virualbox 的三大步: 1.添加源: Add the following line to your /etc/apt/sources.list: deb http://download.v ...
- linux中断的下半部机制
一.中断处理为什么要下半部?Linux在中断处理中间中断处理分了上半部和下半部,目的就是提高系统的响应能力和并发能力.通俗一点来讲:当一个中断产生,调用该中断对应的处理程序(上半部)然后告诉系统,对应 ...
- git如何回退单个文件到某一个commit
答:操作步骤如下: 1. git log "filename" (如:git log README) 2. git reset "commit-id" &quo ...
- jquery 弹窗插件 layer 常见接口
源自:https://www.cnblogs.com/teamobaby/p/3556584.html 常见接口如下: 方法名 描述 $.layer({}) 核心接口,参数是一个对象,对象属性参见上述 ...