tkinter教程
首先创建一个简单窗口,只需如下几句代码
import tkinter
window=tkinter.TK()
window.mainloop()
创建的窗口如图所示
这是一个简单的小窗口,但是远远不能满足我们的需要,它也有许多控制函数,如下表。
函数 | 功能 |
---|---|
title() | 窗口标题 |
geometry() | 窗口大小 |
resizable(width,height) | 窗口大小调整 |
quit() | 退出并销毁窗口 |
update() | 刷新 |
看下面这个例子
import tkinter
window=tkinter.Tk()
window.title('first tk')
window.geometry('300x300') #注意,中间是字母x
window.mainloop()
tkinter组件
tkinter有许多组件,见下表
下面介绍几个常用组件
Label组件
Label组件主要是用来在窗口上某个位置显示一个文字标签,也可以用来显示一张图片,下面介绍一下语法。
w=Label(window,options)
属性 | 说明 |
---|---|
bg | 背景颜色 |
bd | 边框宽度,默认2pixel |
cursor | 鼠标移动到label内的形状,如 i,e,arrow,dot |
font | 字体和大小 |
width | 部件的高 |
height | 部件的高 |
image | 图片将作为label展示 |
text | 这被设置为字符串变量,该变量可能包含一行或多行文本。 |
textvariable | 在窗口小部件内写入的文本设置为控制变量StringVar,以便可以相应地访问和更改它。 |
还有一些其他属性,但是不常用所有没有列举出来。
其中可变文本可由下面两句代码设置
var=tkinter.StringVar()
var.set('this is a label')
通过函数控制变量var,即可实现对label内文本的动态控制。
下面给出一个小例子。
import tkinter
window=tkinter.Tk()
window.title('first tk')
window.geometry('300x300')
vars=tkinter.StringVar()
label=tkinter.Label(window,textvariable=vars)
input=tkinter.Entry(window)
def gettext():
vars.set(input.get())
button=tkinter.Button(window,command=gettext,text="输入")
label.grid(row=1,column=0)
input.grid(row=0,column=0)
button.grid(row=0,column=1)
window.mainloop()
显示结果
Listbox
列表框小部件用于向用户显示列表项。我们只能在列表框中放置文本项,并且所有文本项都包含相同的字体和颜色。
用户可以根据配置从列表中选择一个或多个项目。
下面给出了使用Listbox的语法。
属性 | 说明 |
---|---|
bg | 部件的背景颜色 |
bd | 部件边框大小,默认2pixel |
cursor | 鼠标移动到部件内的形状,有dot,arrow等 |
font | 字体类型和大小 |
fg | 文本颜色 |
height | 它表示列表框中显示的行数。默认值为10。 |
width | 部件的宽度,以字符数衡量 |
heighlightcolor | 窗口小部件处于焦点时的列表框项目的颜色。 |
selectbackground | 被选中时的背景颜色 |
xscrollcommand | 它用于让用户水平滚动列表框。 |
yscrollcommand | 它用于让用户竖直滚动列表框。 |
Listbox自身有许多方法,见下表
方法 | 说明 |
---|---|
activate(index) | 用于选择指定索引处的行 |
delete(first,last=None) | 删除给定范围内的行 |
get(first,last=None) | 用于获取给定范围内存在的列表项 |
index(i) | 用于将指定索引处的行放在小部件的顶部 |
insert(index,* elements) | 用于在指定索引之前插入具有指定数量元素的新行。 |
see(index) | 用于调整列表框的位置,使索引指定的行可见 |
size() | 返回行数 |
xview() | 用于使小部件可以水平滚动 |
yview() | 它允许列表框垂直滚动 |
给出一个小例子
from tkinter import *
top = Tk()
top.geometry("200x250")
lbl = Label(top, text="A list of favourite countries...")
listbox = Listbox(top,height=3)
listbox.insert(1, "India")
listbox.insert(2, "USA")
listbox.insert(3, "Japan")
listbox.insert(4, "Austrelia")
# this button will delete the selected item from the list
btn = Button(top, text="delete", command=lambda listbox=listbox: listbox.delete(ANCHOR))
var=listbox.get(0,3)
print(var)
lbl.pack()
listbox.pack()
btn.pack()
top.mainloop()
显示如下图
通过listbox的方法,可以从列表框中每次删除一个元素。
Button
按钮小部件用于向Python应用程序添加各种类型的按钮。python允许我们根据需要配置按钮的外观。根据需要,可以设置或重置各种选项。
我们还可以将一个方法或函数与一个按钮相关联,当按钮被按下时,这个按钮被调用。
下面给出了使用按钮小部件的语法。
选项 | 说明 |
---|---|
activebackground | 鼠标移动到按钮上时的颜色 |
activeforeground | 鼠标悬停按钮时的字体颜色 |
bd | 以像素为单位的边框宽度 |
bg | 按钮背景色 |
command | 函数调用 |
fg | 按钮前景色 |
font | 按钮文本字体 |
height | 按钮高度,以文本行数或者图像像素表示 |
width | 按钮高度 |
image | 设置为按钮上显示的图像 |
justify | 它说明了多个文本行的表示方式。它设置为左对齐、右对齐和中心对齐 |
padx | 水平方向的附加填充 |
pady | 垂直方向的附加填充 |
underline | 按钮文本带下划线显示 |
from tkinter import *
from tkinter import messagebox
top = Tk()
top.geometry("200x100")
def fun():
messagebox.showinfo("Hello", "Red Button clicked")
b1 = Button(top, text="Red", command=fun, activeforeground="red", activebackground="pink", pady=10)
b2 = Button(top, text="Blue", activeforeground="blue", activebackground="pink", pady=10)
b3 = Button(top, text="Green", activeforeground="green", activebackground="pink", pady=10)
b4 = Button(top, text="Yellow", activeforeground="yellow", activebackground="pink", pady=10)
b1.pack(side=LEFT)
b2.pack(side=RIGHT)
b3.pack(side=TOP)
b4.pack(side=BOTTOM)
top.mainloop()
执行结果
canvas
canvas小部件用于向python应用程序添加结构化图形。它用于向python应用程序绘制图形和图表。使用画布的语法如下所示。
w=Canvas(options)
选项 | 说明 |
---|---|
bd | 边框宽度,默认是2 pixel |
bg | 画布背景色 |
confine | 置为使画布在滚动区域之外不可滚动。 |
cursor | 光标作用在画布上时的形状,如arrow,dot,circle. |
height | 画布高度 |
width | 画布宽度 |
highlightcolor | 画布聚焦时的突出显示颜色 |
relief | 边界的类型,可以是SUNKEN,RAISED,GROOVE,RIDGE |
xscrollcommand | 如果画布是可滚动的,这个属性应该是水平滚动条的.set()方法。 |
yscrollcommand | 如果画布是可滚动的,这个属性应该是垂直滚动条的.set()方法。 |
entry
entry小部件用于向用户提供单行文本框以接受用户的值。我们可以使用entry小部件接受用户的文本字符串。它只能用于来自用户的一行文本。对于多行文本,我们必须使用文本小部件。
下面给出了使用entry小部件的语法。
选项 | 说明 |
---|---|
bg | 背景色 |
bd | 边框宽度 |
cursor | 光标类型,可以为箭头(arrow),点(dot)等 |
fg | 文本颜色 |
font | 表示文本的字体类型 |
show | 用于显示其他类型的文本条目,而不是字符串,比如用*键入密码 |
width | 小部件宽度 |
xscrollcommand | 如果我们希望用户输入更多的文本,然后输入小部件的实际宽度,那么可以将entry小部件链接到水平滚动条。 |
highlightbackground | 它表示当小部件没有输入焦点时要在遍历突出显示区域中显示的颜色。 |
highlightcolor | 它表示当小部件具有输入焦点时,在小部件周围绘制的遍历突出显示矩形使用的颜色。 |
justify | 如果文本包含多行,则指定如何组织文本 |
下面给出一个例子
from tkinter import *
top = Tk()
top.geometry("400x250")
email = Label(top, text = "Email").place(x = 30, y = 40)
password = Label(top, text = "Password").place(x = 30, y = 80)
sbmitbtn = Button(top, text = "Submit" ,activebackground = "pink", activeforeground = "blue").place(x = 30, y = 120)
e2 = Entry(top).place(x = 95, y = 40)
e3 = Entry(top).place(x = 95, y = 80)
top.mainloop()
显示如下图
Entry 小部件方法
方法 | 说明 |
---|---|
delete(first,last=none) | 用于删除小部件内指定字符 |
get() | 获取小部件内写入的文本 |
icursor(index) | 用于更改插入光标的位置。我们可以指定要放置光标的字符的索引。 |
index(inex) | 用于将光标放在指定索引处所写字符的左侧。 |
insert(index,s) | 在指定索引的字符串前插入字符串 |
select_range(start,end) | 选择指定索引内的字符 |
select_to(index) | 选择从开始到指定索引的内容 |
xview(index) | 用于将entry小部件链接到水平滚动条。 |
下面给出一个简单的加法计算器的例子
import tkinter as tk
from functools import partial
def call_result(label_result, n1, n2):
num1 = (n1.get())
num2 = (n2.get())
result = int(num1) + int(num2)
label_result.config(text="Result = %d" % result)
return
root = tk.Tk()
root.geometry('400x200+100+200')
root.title('Calculator')
number1 = tk.StringVar()
number2 = tk.StringVar()
labelNum1 = tk.Label(root, text="A").grid(row=1, column=0)
labelNum2 = tk.Label(root, text="B").grid(row=2, column=0)
labelResult = tk.Label(root)
labelResult.grid(row=7, column=2)
entryNum1 = tk.Entry(root, textvariable=number1).grid(row=1, column=2)
entryNum2 = tk.Entry(root, textvariable=number2).grid(row=2, column=2)
call_result = partial(call_result, labelResult, number1, number2)
buttonCal = tk.Button(root, text="Calculate", command=call_result).grid(row=3, column=0)
root.mainloop()
执行结果
Scrollbar
滚动条小部件用于向下滚动列表框、文本和画布等其他小部件的内容。但是,我们也可以创建到entry小部件的水平滚动条。
下面给出了使用滚动条小部件的语法。
选项 | 说明 |
---|---|
activebackground | 小部件被聚焦时的背景颜色 |
bg | 小部件背景颜色 |
bd | 边框宽度 |
command | 它可以设置为与列表关联的过程,每次移动滚动条时都可以调用该过程。 |
jump | 用于控制滚动跳转的行为。如果设置为1,则在用户释放鼠标按钮时调用回调。 |
orient | 可以被设置为水平(VERTICAL)或者垂直(HORIZONTAL)方向 |
repeatdelay | 此选项告诉滑块开始重复向该方向移动之前要按下按钮的持续时间。默认值为300 ms。 |
troughcolor | 它代表槽的颜色。 |
width | 小部件宽度 |
Scrollbar还提供了两个操作方法
方法 | 说明 |
---|---|
get() | 返回滚动条当前位置的两个数字a,b |
set(first,last) | 2设置(第一个,最后一个)它用于将滚动条连接到另一个小部件w。另一个小部件的yscrollcommand或xscrollcommand用于此方法。 |
下面给出一个示例
from tkinter import *
top = Tk()
sb = Scrollbar(top,orient=VERTICAL)
sb2=Scrollbar(top,orient=HORIZONTAL)
sb.pack(side=RIGHT,fill=Y)
sb2.pack(side=BOTTOM,fill=X)
mylist = Listbox(top, yscrollcommand=sb.set,xscrollcommand=sb2.set,width=15)
for line in range(30):
mylist.insert(END, "I can tell you the Number is " + str(line))
mylist.pack(side=LEFT)
sb.config(command=mylist.yview)
sb2.config(command=mylist.xview)
mainloop()
示例结果如下
注意:要把滚动条绑定到某个小部件上,则必须在小部件和滚动条内互相绑定。
Menu
菜单小部件用于在Python应用程序中创建各种类型的菜单(顶级、下拉和弹出)。
顶级菜单是显示在父窗口标题栏下的菜单。我们需要创建一个新的菜单小部件实例,并使用add()方法向它添加各种命令。
下面给出了使用菜单小部件的语法。
选项 | 说明 |
---|---|
activebackground | 控件处于焦点下时控件的背景色 |
activeborderwidth | 部件位于鼠标下方时它的边框宽度 |
activeforeground | 部件处于焦点下时字体的颜色 |
bg | 部件的背景色 |
bd | 部件的边框宽度 |
cursor | 当鼠标指针悬停在小部件上时,鼠标指针变为光标类型。光标类型可以设置为箭头或点。 |
disabledforeground | 当部件被禁用时的字体颜色 |
font | 文本的字体类型 |
fg | 小部件的前景色 |
relief | 小部件边框类型,默认是RAISED |
image | 菜单上被用作显示的图像 |
selectcolor | 选中复选按钮或单选按钮时用于显示的颜色。 |
tearoff | 默认情况下,菜单中的选项从位置1开始。如果我们将tearoff设置为1,那么它将从第0个位置开始。 |
title | 如果要更改窗口标题,请将此选项设置为窗口标题。 |
Menu部件带有许多方法,下面部分介绍
方法 | 说明 |
---|---|
add_command(options) | 将菜单项添加到菜单 |
add_radiobutton(options) | 将单选按钮添加到菜单 |
add_checkbutton(options) | 将复选按钮添加到菜单 |
add_cascade(options) | 它用于通过将给定菜单与父菜单关联来创建父菜单的分层菜单。 |
add_seperator() | 个菜单添加分隔线 |
add(type,options) | 将特定的菜单项添加到菜单中 |
delete(startindex,endindex) | 删除指定范围内的菜单项 |
index(item) | 获取特定菜单项的索引 |
invoke(index) | 调用与指定索引关联的选项 |
下面给出一个简单的例子
import tkinter as tk
root=tk.Tk()
menubar=tk.Menu(root)
File=tk.Menu(menubar,tearoff=0)
File.add_command(label='new')
File.add_command(label='open')
File.add_command(label='save')
File.add_command(label='save as...')
File.add_separator()
File.add_command(label='exit',command=root.quit)
menubar.add_cascade(label='File',menu=File)
Edit=tk.Menu(menubar,tearoff=0)
Edit.add_command(label='cut')
Edit.add_command(label='copy')
Edit.add_command(label='paste')
menubar.add_cascade(label='Edit',menu=Edit)
Help=tk.Menu(menubar)
Help.add_command(label='About')
menubar.add_cascade(label='Help',menu=Help)
root.config(menu=menubar)
root.mainloop()
执行结果如下
Frame
python tkinter框架小部件用于组织小部件组。它就像一个容器,可以用来存放其他小部件。屏幕的矩形区域用于将小部件组织到Python应用程序。
下面给出了使用框架小部件的语法。
w=Frame(parent,options)
选项 | 说明 |
---|---|
bd | 边框宽度 |
bg | 部件背景色 |
cursor | 当鼠标移动到小部件上时的形状,比如arrow,dot |
height | 框架的高 |
width | 框架的宽 |
highlightbackground | 处于焦点下的背景色 |
highlightcolor | 处于焦点下时文字的颜色 |
relief | 边框类型,默认是FLAT |
下面给出一个小例子
from tkinter import *
top = Tk()
top.geometry("140x100")
frame = Frame(top)
frame.pack()
leftframe = Frame(top)
leftframe.pack(side=LEFT)
rightframe = Frame(top)
rightframe.pack(side=RIGHT)
btn1 = Button(frame, text="Submit", fg="red", activebackground="red")
btn1.pack(side=LEFT)
btn2 = Button(frame, text="Remove", fg="brown", activebackground="brown")
btn2.pack(side=RIGHT)
btn3 = Button(rightframe, text="Add", fg="blue", activebackground="blue")
btn3.pack(side=LEFT)
btn4 = Button(leftframe, text="Modify", fg="black", activebackground="white")
btn4.pack(side=RIGHT)
top.mainloop()
运行结果
Message
消息小部件用于向用户显示有关Python应用程序行为的消息。消息小部件向用户显示无法编辑的文本消息。消息文本包含多行。但是,消息只能以单个字体显示。
下面给出了使用消息小部件的语法。
w=Message(parent,options)
选项 | 说明 |
---|---|
anchor | 如果小部件包含的空间超过了文本的需要,它用于决定文本在提供给小部件的空间内的确切位置。默认值为“CENTER”。 |
bg | 背景色 |
bd | 边框的大小,默认是2pixel |
cursor | 光标移动到部件内时的形状,比如arrow,dot |
font | 字体类型 |
fg | 文本颜色 |
height | 小部件的高度 |
width | 小部件的宽度 |
image | 我们可以将该选项设置为静态图像,以便在小部件上显示该选项。 |
justify | 此选项用于指定多行代码之间的对齐方式。可能的值可以是LEFT(左对齐)、CENTER(居中,默认)和RIGHT(右对齐) |
padx | 水平填充 |
pady | 垂直填充 |
relief | 边框类型,默认是FLAT |
text | 需要显示的文本 |
textvariable | 显示可变文本内容 |
underline | 此选项的默认值为-1,表示没有下划线。我们可以将此选项设置为现有的数字,以指定字符串的第n个字母将加下划线。 |
wraplength | 我们可以将文本换行到行数,方法是将此选项设置为所需的数字,以便每行只包含该数量的字符。 |
Message 比较简单,容易掌握,这里就不给出示例了。
Checkbutton
Checkbutton用于跟踪提供给应用程序的用户选择。换句话说,我们可以说Checkbutton用于实现on/off选择。Checkbutton可以包含文本或图像。Checkbutton主要用于为用户提供多种选择,用户需要从中选择一个。它通常实现许多选择中的许多选择。
下面给出checkbutton的语法。
w=checkbutton(root,options)
选项 | 说明 |
---|---|
activebackground | 当复选框处于光标下方时它的背景色。 |
activeforeground | 当复选框处于光标下方时它的前景色 |
bg | 按钮背景色 |
bitmap | 在按钮上显示一个图像 |
bd | 边角的大小 |
command | 它与一个函数相关联,当复选框状态发生改变时调用该函数 |
cursor | 当鼠标指针位于复选按钮上方时,它将被更改为光标名称。 |
disableforeground | 表示禁用复选框的颜色 |
font | 复选框的字体 |
fg | 字体颜色 |
height | 复选框的高度,用行数表示,默认是1 |
highlightcolor | 当复选框处于对焦状态时焦点突出的颜色 |
image | 按钮图像 |
justify | 文本包含多行时的对其方式 |
offvalue | 如果未选中按钮,关联的控制变量默认设置为0。我们可以将未检查变量的状态更改为其他变量。 |
onvalue | 如果选中按钮,关联的控制变量默认设置为1。我们可以将已检查变量的状态更改为其他变量。 |
padx | 水平填充 |
pady | 垂直填充 |
relief | 边框类型,默认情况下是FALT |
selectcolor | 设置复选按钮时的颜色。默认情况下,它是红色的。 |
selectimage | 被设置时显示的图片 |
state | 复选框的状态,默认时normal,我们可以改为禁用使复选框没有响应 |
variable | 跟踪复选框状态 相关联变量 |
width | checkbutton的宽度 |
wraplength | 将此选项设置为整数,表示每行包含的字数 |
checkbutton 包含如下几个方法
方法 | 说明 |
---|---|
deselect() | 调用此函数关闭checkbutton |
flash() | 复选框在活动颜色和正常颜色之间闪烁 |
invoke() | 调用与checkbutton关联的函数 |
select() | 调用此函数打开复选框 |
toggle() | 用于在不同复选框之间切换 |
下面给出一个checkbutton的小示例
import tkinter as tk
root=tk.Tk()
root.geometry('200x200')
var1=tk.IntVar()
var2=tk.IntVar()
varstr=tk.StringVar()
def descri():
if(var1.get()==1 and var2.get()==0):
varstr.set('C/C++ is a basic language')
elif(var1.get()==0 and var2.get()==1):
varstr.set("Python is a easy language")
elif(var1.get()==0 and var2.get()==0):
varstr.set('')
else:
varstr.set('good good study,day day up')
cbk1=tk.Checkbutton(root,text='C/C++',variable=var1,command=descri,offvalue=0,height=1,width=10)
cbk2=tk.Checkbutton(root,text='Python',variable=var2,command=descri,offvalue=0,height=1,width=10)
label=tk.Label(root,textvariable=varstr)
cbk1.pack()
cbk2.pack()
label.pack()
root.mainloop()
显示效果如下图
Scale
Scale小部件用于实现python应用程序的图形滑块,以便用户可以在滑块上显示的值范围内滑动并从中选择一个。
我们可以根据比例尺的分辨率控制最小值和最大值。当用户被迫从给定的值范围中只选择一个值时,它为Entry小部件提供了一种替代方法。
下面给出了使用Scale小部件的语法。
w=Scale(root,options)
选项 | 说明 |
---|---|
activebackground | 小部件具有焦点时的背景颜色 |
bg | 小部件背景颜色 |
bd | 小部件边框大小,默认是2pixel |
command | 它被设置为每次移动滑块时调用的过程。如果滑块快速移动,则在它稳定时执行回调。 |
cursor | 将鼠标指针更改为分配给此选项的光标类型。它可以是箭头、圆点等。 |
digits | 如果用于控制比例数据的控制变量为字符串类型,则此选项用于指定将数值比例转换为字符串时的数字数量。 |
font | 文本字体 |
fg | 文本颜色 |
from_ | 小部件范围的一端 |
highlightbackground | 小部件没有焦点时突出显示的颜色 |
highlightcolor | 小部件有焦点时突出显示的颜色 |
label | 这可以设置为一些文本,这些文本可以显示为带有刻度的标签。如果比例尺是水平的,则显示在左上角;如果比例尺是垂直的,则显示在右上角。 |
length | 它表示小部件的长度。如果刻度是水平的,则表示X维度;如果刻度是垂直的,则表示y维度。 |
orient | 它可以被设置为水平的或者时垂直的取决于小部件的类型 |
relief | 边框的类型,默认是FLAT |
repeatdelay | 这个选项告诉按钮在滑块开始向那个方向重复移动之前被按下的持续时间。 |
showvalue | 默认情况下,scale的值以文本形式显示。我们可以将此选项设置为0以禁用标签。 |
sliderlength | 它表示滑块窗口沿标尺长度的长度。默认为30像素。但是,我们可以将其更改为适当的值。 |
state | 默认情况下,滑块是活动的,我们可以设置为DISABLED禁用滑块 |
to | 它表示一个浮点数或整数值,该整数值指定由刻度表示的范围的另一端。 |
troughcolor | 通过的颜色 |
variable | 滑块的控制变量 |
width | 小部件的宽度 |
***scale***带有两个控制方法
方法 | 说明 |
---|---|
get() | 用来获取scale部件当前的值 |
set(value) | 用来设置部件的值 |
下面给出一个***scale***部件的示例
import tkinter as tk
root=tk.Tk()
def show():
label.config(text='score is '+str(scale.get()))
var=tk.DoubleVar()
label=tk.Label(root)
scale=tk.Scale(root,from_=0,to=150,variable=var,orient=tk.HORIZONTAL)
scale.pack()
button=tk.Button(root,text='score',command=show)
button.pack()
label.pack()
root.mainloop()
显示效果如下图
Topelevel
oplevel小部件用于创建和显示由窗口管理器直接管理的Toplevel窗口。toplevel小部件的顶部可能有父窗口,也可能没有。
当python应用程序需要在新窗口上表示一些额外的信息、弹出窗口或一组小部件时,可以使用toplevel小部件。
顶层窗口具有标题栏、边框和其他窗口装饰。
下面给出了使用Toplevel小部件的语法。
w=Toplevel(options)
选项 | 说明 |
---|---|
bg | 窗口背景色 |
bd | 窗口边框大小 |
cursor | 鼠标移动到窗口内时将变成的类型,可以为arrow,dot等 |
class_ | 文本小部件中选择的文本将被导出到窗口管理器中。我们可以把这个设为0,使这个行为为假。 |
font | 窗口小部件字体类型 |
fg | 窗口前景色 |
height | 窗口高度 |
width | 窗口宽度 |
relief | 窗口类型 |
Toplevel 带有许多方法,下面做简要介绍
方法 | 说明 |
---|---|
title(string) | 用于定义窗口标题 |
sizefrom(who) | 用于定义窗口size控制器 |
resizable(width,height | 用于控制窗口是否可以调整大小 |
deiconify() | 这个方法用于显示窗口 |
frame() | 用于显示窗口相关的窗口标识符 |
group(window) | 用于将窗口添加到特定的窗口组群中 |
state() | 用于获取窗口的当前状态,可能为normal,iconic,withdrawn,icon |
withdraw() | 用于删除窗口,但不销毁它 |
maxsize(width,height) | 声明窗口的最大大小 |
minsize(width,height) | 声明窗口的最小大小 |
下面给出一个例子
from tkinter import *
root = Tk()
root.geometry("200x200")
def open():
top = Toplevel(root)
top.title('new window')
top.minsize(100,100)
label=Label(top,text="welcome to the new window")
label.pack()
top.mainloop()
btn = Button(root, text="open", command=open)
btn.place(x=75, y=50)
root.mainloop()
下面介绍控件的三种放置方式pack(),place()和grid()。
pack()
如果窗口内组件较少时,使用pack进行布局非常方便。下面介绍pack()方法的参数选项。
选项 | 说明 |
---|---|
side | 组件的添加位置,可以为TOP,BOTTOM,LEFT,RIGHT |
fill | 组件是否进行填充,,有X,Y,NONE,BOTH四中选择 |
anchor | 比side更精准的控制组件的位置,有N,S,W,N代表上下左右,NW,NE,SW,SE代表左上,右上,左下,右下,CENTER代表中。 |
expand | 是否随父容器进行伸缩变换 |
padx | 水平方向外间距 |
pady | 垂直方向外间距 |
ipadx | 水平方向内间距 |
ipady | 垂直方向内间距 |
当组件数量较多时,配合Frame使用界面比较理想,但这样比较麻烦,不建议使用,更多关于pack() 的用法和示例请点击这里。
grid()
顾名思义,窗口被分割成一个个的小方格,每一个方格可以放置一个组件。下面介绍其控制选项。
选项 | 说明 |
---|---|
row | 组件放置的行号,从0开始 |
column | 组件放置的列号,从0开始 |
rowspan | 通过设置这个选项的值可以合并相邻的行 |
columnspan | 通过设置这个选项可以合并相邻的列 |
in_ | 登记子插件,比如用in_=b1,可以将本组件登记为b1的子插件 |
padx | 水平方向外间距 |
pady | 垂直方向外间距 |
ipadx | 水平方向内间距 |
ipady | 垂直方向内间距 |
sticky | 用来分配单元中多余的空间。 |
sticky的具体用法见下面
还有一些与grid()类似的函数,下面也做简要介绍
函数 | 说明 |
---|---|
grid_configure(**options) | 用法和grid()一样 |
grid_forget() | 将组件从屏幕中删除,但并没有销毁 |
grid_info() | 以字典形式返回当前grid()选项 |
grid_location(x,y) | 返回位于(或接近)给定坐标(x, y)的网格位置 --返回值是一个 2 元组表示网格对应的(列, 行) |
grid_remove() | 移除组件 |
grid_propagate(flag) | 如果开启,父组件会自动调节尺寸以容纳所有子组件 --默认值是开启(flag=True) --该方法仅适用于父组件 |
注意:不要在同一个窗口中同时使用pack()和grid()。
更多关于grid()的用法和示例请看这里。
place()
窗口可以看做一个二维的平面,通过坐标定位可以很精确的定位每个点的位置,因此也就可以精确的放置组件到我们想要的位置。x,y的坐标如下图定位
下面介绍一下其控制选项及参数。
选项 | 说明 |
---|---|
x | 指定组件的x坐标 |
y | 指定组件的y坐标 |
relx | 指定组件相对于父容器的x坐标,取值范围是0.0~1.0 |
rely | 指定组件相对于父容器的y坐标,取值范围是0.0~1.0 |
relheight | 指定组件相对于父容器的高度,取值范围是0.0~1.0 |
relwidth | 指定组件相对于父容器的宽度,取值范围是0.0~1.0 |
width | 组件的宽度,单位时pixel |
height | 组件的高度,单位时pixel |
bordermode | 该属性支持“inside”或“outside” 属性值,用于指定当设置组件的宽度、高度时是否计算该组件的边框宽度。 |
tkinter的更多相关知识可以参考这个网站,讲解比较详细,缺点是全英文,我这边文章的多数内容也都是来自这个网站。