Python:GUI之tkinter学习笔记1控件的介绍及使用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Python:GUI之tkinter学习笔记1控件的介绍及使⽤
tkinter的使⽤
1.模块的导⼊
2.使⽤
3.控件介绍
Tk
Button
Label
Frame
Toplevel
Menu
Menubutton
Canvas
Entry
Message
Text
Listbox
Checkbutton
Radiobutton
Scale
Scrollbar
⾸发时间:2018-03-04 16:39
Python的GUI各有各特点。
由于只是轻微涉及GUI开发,所以就以轻量级的tkinter来学习。
tkinter的使⽤:
1.模块的导⼊
[tkinter是python默认的gui库,所以⼀般不需要另外安装模块]:from tkinter import *
2.使⽤:
创建主窗⼝:root=Tk() 【root是⼀个主窗⼝对象】
创建若⼲个控件:控件对象=控件(root,控件参数设置) 【这⾥的控件也可以添加到其他窗⼝中】
将控件显⽰出来:控件对象.pack() 【这⾥也不⼀定是pack,也可以是其他的显⽰⽅式,⽐如grid,后⾯介绍】
让主窗⼝持续显⽰:root.mainloop()
3.控件介绍:
主窗⼝Tk[所有控件都需要附着在界⾯上]:
介绍:主窗⼝是所有控件附着的基础,所有控件都需要附着在界⾯上,如果程序中没有指定控件附着的窗⼝,将默认附着
到主窗⼝Tk中,如果程序中没有定义Tk,那么将⾃动创建⼀个
常见属性【想要初始化主窗⼝的属性需要使⽤主窗⼝对象.属性(“参数”) :
title:窗⼝标题
geometry:窗⼝⼤⼩,⼤写格式是”宽度x⾼度+x位置+y位置”【注意不是*是x】,其中x,y将左上⾓作为(0,0)from tkinter import *
root=Tk()
root.title('我的窗⼝')
root.geometry('500x500')
root.mainloop()
按钮Button:
介绍:按钮
常⽤参数设置【可以在创建按钮的时候指定,也可以创建后使⽤按钮对象.config() 来设置】:
text:按钮上的⽂本显⽰
anchor:按钮上内容的位置[取值:n, ne, e, se, s, sw, w, nw, or center,其中n e s w是东南西北的缩写]
cursor:当⿏标移动到按钮上时所显⽰的光标【arrow:箭头,cross:⼗字,dot: 点,hand1:⼿ …….】
font:字体,使⽤元组来指定⼀个字体,这个元组包含了⼀个字体类型名字,⼀个以磅为单位的⾼度,代表⼀个或多个样式
的字符串,⽐如("Times", 10, "bold")
background[可缩写为bg]:背景⾊,取值可未英⽂颜⾊字符串,或者RGB值
foreground[可缩写为fg]:前景⾊,取值可未英⽂颜⾊字符串,或者RGB值
borderwidth[可缩写为bd]::边框⼤⼩
activebackground:按钮处于活动状态时使⽤的背景颜⾊。
activeforeground:按钮处于活动状态时使⽤的前景颜⾊。
disabledforeground:禁⽤按钮时使⽤的颜⾊。
highlightbackground:当按钮没有焦点时⽤于⾼亮边框的颜⾊
relief:边框的装饰
列表⾥⾯是relief的可选值:["flat", "raised", "sunken", "solid", "ridge", "groove"]
flat是指按钮边框是平坦的,raise是指按钮边框是凸起的,sunken是指按钮边框是凹⼊的,solid是指按钮边框是粗边
框…
按钮relief的效果:
padx和pady:指定⽂本或图象与按钮边框的间距,x,y为x轴,y轴⽅向
height,widht:按钮的尺⼨,height为⾼度,width为宽度,如果不设置则默认为包括⽂本内容
state:按钮的状态,可取值:NORMAL, ACTIVE 或 DISABLED。
默认值为NORMAL。
justify:对齐⽅式
command:当按下按钮时调⽤的⽅法
Button所有的可设置参数
activebackground, activeforeground, anchor,
background, bitmap, borderwidth, cursor,
disabledforeground, font, foreground
highlightbackground, highlightcolor,
highlightthickness, image, justify,
padx, pady, relief, repeatdelay,
repeatinterval, takefocus, text,
textvariable, underline, wraplength
WIDGET-SPECIFIC OPTIONS【特有选项】:
command, compound, default, height,
overrelief, state, width
from tkinter import *
def hello():
print("hello")
root=Tk()
# RELIEF=["flat", "raised", "sunken", "solid", "ridge", "groove"]
btn1=Button(root,text='click me')
btn1.config(bg='green',fg='white',cursor='hand1',height=10,width=10,command=hello,relief='sunken')
btn1.config(anchor=LEFT)
btn1.pack()
# for col,i in enumerate(RELIEF):
# btn=Button(root,text=i,relief=i,anchor=S)
# btn.grid(row=0,column=col)
root.mainloop()
Label:
介绍:显⽰⼀个⽂本或图象。
参数设置:label没有什么特别的参数,可⽤参数参考下⾯的可⽤参数,再可以参考Button的参数设置STANDARD OPTIONS【label的标准可选参数】
activebackground, activeforeground, anchor,
background, bitmap, borderwidth, cursor,
disabledforeground, font, foreground,
highlightbackground, highlightcolor,
highlightthickness, image, justify,
padx, pady, relief, takefocus, text,
textvariable, underline, wraplength
WIDGET-SPECIFIC OPTIONS【特有选项】:
height, state, width
from tkinter import *
root=Tk()
root.title('我的窗⼝')
root.geometry('500x500')
label=Label(text='⽤户名:',bg='green')
label.grid()
root.mainloop()
框架Frame:
介绍:⼀个容器窗⼝部件。
可以有边框和背景。
Frame默认是没有⼤⼩的,所以必须要设置⾼度和宽度,⽽当加了控件到Frame 后它会“缩⽔”【这⾥缩⽔是因为Frame⾃动缩⼩到刚好能包裹控件】,需要在显⽰的时候强制设置⼤⼩⽐如pack(fill=X),这是强制填充⽔平⽅向,⼜或者使⽤ Frame对象.pack_propagate(0),这个函数可以使得设置的⾼度和宽度⽣效
参数设置:可⽤参数参考下⾯的可⽤参数,再参考按钮的参数设置
STANDARD OPTIONS【标准可⽤参数】
activebackground, activeforeground, anchor,
background, bitmap, borderwidth, cursor,
disabledforeground, font, foreground,
highlightbackground, highlightcolor,
highlightthickness, image, justify,
padx, pady, relief, takefocus, text,
textvariable, underline, wraplength
#这是⼀段没有显⽰Frame 代码
from tkinter import *
root=Tk()
root.geometry('500x500')
frame=Frame(root,height = 200,width = 400,bg = 'black')
Label(frame,text='mylabel').pack()
frame.pack()
root.mainloop()
#下⾯是探究出缩⽔原因的代码
from tkinter import *
root=Tk()
root.geometry('500x500')
frame=Frame(root,height = 400,width = 400,bg = 'green')
button1=Button(frame,text='hello')
button1.pack(side=LEFT,padx=5,pady=5)#增加了边距之后,发现出了frame的背景颜⾊
button2=Button(frame,text='hello')
button2.pack(side=LEFT)
frame.pack(side=TOP)
root.mainloop()
#下⾯的是使⽤.pack_propagate(0)解决了问题的代码
from tkinter import *
root=Tk()
root.geometry('500x500')
frame=Frame(root,height = 400,width = 400,bg = 'green')
# Label(frame,text='mylabel',padx=5,pady=5).pack(side=LEFT)
button1=Button(frame,text='hello')
button1.pack(side=LEFT,padx=5,pady=5)
button2=Button(frame,text='hello')
button2.pack(side=LEFT)
frame.pack_propagate(0)
frame.pack(side=TOP)
# frame.pack(side=TOP,fill=X)
root.mainloop()
Toplevel:
介绍:⼀个容器窗⼝,作为⼀个单独的、最上⾯的窗⼝显⽰。
参数设置:可⽤参数参考下⾯的,⽤法参考Tk的
Toplevel是⼀个⼦窗⼝,当⽗窗⼝关闭时⼦窗⼝会关闭,但⼦窗⼝关闭时⽗窗⼝不关闭Valid resource names:
background, bd, bg, borderwidth, class,
colormap, container, cursor, height, highlightbackground,
highlightcolor, highlightthickness, menu, relief, screen, takefocus,
use, visual, width
from tkinter import *
root=Tk()
root.title('我的窗⼝')
root.geometry('500x500')
t1=Toplevel(root)
t1.title("Top窗⼝")
t1.geometry("100x100")
label=Label(t1,text="⽤户名:")
label.pack()
root.mainloop()
菜单Menu:
介绍:菜单控件,相当于⼀个菜单组\菜单栏,没有添加其他菜单时默认没有显⽰,只有添加其他的菜单,才会了实际的意义要想显⽰菜单,必须在“要添加菜单的窗⼝对象”的config中允许添加上“菜单对象”
参数设置:可⽤参数参考下⾯的可⽤参数,再参考按钮的参数设置
注意:Menu是没有text的
添加菜单按钮:
添加命令菜单:Menu对象.add_command()
添加多级菜单:Menu对象.add_cascade(**options) 【多级菜单可以传⼊⼀个菜单对象】
添加分割线:Menu对象.add_separator(**options)
添加复选框菜单:Menu对象.add_checkbutton(**options)
添加单选框菜单:Menu对象.add_radiobutton(**options)
插⼊菜单:insert_separator(),insert_checkbutton(),insert_radiobutton(),insert_cascade(),
其他。
常见可⽤参数:
activebackground, activeborderwidth,
activeforeground, background, bd, bg, borderwidth, cursor,
disabledforeground, fg, font, foreground, postcommand, relief,
selectcolor, takefocus, tearoff, tearoffcommand, title, type
from tkinter import *
root=Tk()
menuBar=Menu(root,tearoff=0)
root.config(menu=menuBar)
filemenu=Menu(menuBar,fg='green')#⽂件菜单下的字体是绿⾊的
filemenu.add_command(label='新建',accelerator = 'Ctrl+N')
filemenu.add_command(label='打开',accelerator = 'Ctrl+O')
filemenu.add_command(label='保存',accelerator = 'Ctrl+S')
filemenu.add_command(label='另存为',accelerator ='Ctrl+Shift+S')
menuBar.add_cascade(label='⽂件',menu=filemenu)
#这⾥测试root.config(menu=menuBar)的作⽤
# def show_menuBar():
# root.config(menu=menuBar)
# button=Button(text='show_menu',command=show_menuBar)
# button.pack()
root.mainloop()
Menubutton:
介绍:菜单按钮。
⽤来实现下拉式菜单。
参数设置:可⽤参数参考上⾯Menu的,⽤法同样可以参考按钮Button的
添加菜单的⽅法参考Menu的
注意:这次不是在root⾥⾯config了,⽽是在菜单按钮中设置
from tkinter import *
root=Tk()
menubtn=Menubutton(root,text='单击出现下拉菜单',relief='raise')#建⽴⼀个菜单按钮
menubtn.pack()
#添加菜单
filemenu=Menu(menubtn)
filemenu.add_command(label='新建')
menubtn.config(menu=filemenu)#设置菜单按钮允许显⽰菜单,这⾥不是root了
root.mainloop()
Canvas:
介绍:组织图形。
这个部件可以⽤来绘制图表和图,创建图形编辑器,实现定制窗⼝部件
参数设置:可⽤参数参考下⾯的,⽤法同样可以参考按钮Button的
添加图像的⽅法:
create_rectangle:根据四个参数画⼀个矩形,四个参数是位置
create_polygon:根据提供的多个参数画⼀个多边形
其他。
可⽤参数: background, bd, bg, borderwidth, closeenough,
confine, cursor, height, highlightbackground, highlightcolor,
highlightthickness, insertbackground, insertborderwidth,
insertofftime, insertontime, insertwidth, offset, relief,
scrollregion, selectbackground, selectborderwidth, selectforeground,
state, takefocus, width, xscrollcommand, xscrollincrement,
yscrollcommand, yscrollincrement
from tkinter import *
root=Tk()
root.title('我的窗⼝')
root.geometry('500x500')
mycanvas=Canvas(root,width=200,height=200,bg='green')
mycanvas.pack()
#画⼀个矩形
mycanvas.create_rectangle(10,10,110,110,outline = 'red',width = 5)
root.mainloop()
Entry:
介绍:单⾏⽂本输⼊域。
参数设置:可⽤参数参考下⾯的,⽤法同样可以参考按钮Button的
Valid resource names: background, bd, bg, borderwidth, cursor,
exportselection, fg, font, foreground, highlightbackground,
highlightcolor, highlightthickness, insertbackground,
insertborderwidth, insertofftime, insertontime, insertwidth,
invalidcommand, invcmd, justify, relief, selectbackground,
selectborderwidth, selectforeground, show, state, takefocus,
textvariable, validate, validatecommand, vcmd, width,
xscrollcommand.
from tkinter import *
root=Tk()
root.title('我的窗⼝')
root.geometry('300x300+20+10')
entry=Entry(root)
entry.pack()
root.mainloop()
Text:
介绍:多⾏⽂本输⼊域,允许你⽤不同的样式和属性来显⽰和编辑⽂本。
同时⽀持内嵌图象和窗⼝。
参数设置:可⽤参数参考下⾯的,⽤法同样可以参考按钮Button的
STANDARD OPTIONS
background, borderwidth, cursor,
exportselection, font, foreground,
highlightbackground, highlightcolor,
highlightthickness, insertbackground,
insertborderwidth, insertofftime,
insertontime, insertwidth, padx, pady,
relief, selectbackground,
selectborderwidth, selectforeground,
setgrid, takefocus,
xscrollcommand, yscrollcommand,
WIDGET-SPECIFIC OPTIONS
autoseparators, height, maxundo,
spacing1, spacing2, spacing3,
state, tabs, undo, width, wrap,
from tkinter import *
root=Tk()
root.title('我的窗⼝')
root.geometry('300x300+250+55')
button=Button(text='submit')
button.pack()
t1=Text(root,height=100,width=100,cursor='cross')
t1.pack()
root.mainloop()
Message:
介绍:显⽰多⾏⽂本。
类似label窗⼝部件,但是能够⾃动地调整⽂本到给定的宽度或⽐率。
参数设置:与Label类似
由于Label也可以显⽰多⾏⽂本后,就逐渐少⽤Message了。
"""Message widget to display multiline text. Obsolete since Label does it too."""
Listbox:
介绍:列表框⽤于从⼀组⽂本项⽬中进⾏选择。
根据列表框的配置⽅式,⽤户可以从列表中选择⼀个或多个项⽬。
参数设置:可⽤参数参考下⾯的,参数设置同样可以参考按钮Button的
selectmode:选择模式,selectmode=EXTENDED时允许多选
selectbackground:选中时的背景颜⾊
selectforeground:选中时的字体颜⾊
selectborderwidth:选中时的边框⼤⼩
常⽤函数:
插⼊:insert(索引,元素)
删除:delete(索引,元素)
获取listbox元素:ge t()
Valid resource names: background, bd, bg, borderwidth, cursor,
exportselection, fg, font, foreground, height, highlightbackground,
highlightcolor, highlightthickness, relief, selectbackground,
selectborderwidth, selectforeground, selectmode, setgrid, takefocus,
width, xscrollcommand, yscrollcommand, listvariable
from tkinter import *
root=Tk()
root.title('我的窗⼝')
root.geometry('300x300+20+10')
# listbox=Listbox(root)
listbox=Listbox(root,selectmode=EXTENDED)
listbox.insert(0,"孙悟空")
listbox.insert(1,"唐僧")
listbox.insert(2,"葫芦娃")
listbox.pack()
def func1():
print(listbox.get(0,END))#以元组形式返回所有listbox的元素
def func2():
print(listbox.select_includes(1))#当对应索引被选中时返回True
def func3():
print(listbox.curselection())#以元组形式返回被选中的元素
btn1=Button(text="获取所有元素",command=func1)
btn1.pack()
btn2=Button(text="判断1是否选中",command=func2)
btn2.pack()
btn3=Button(text="获取选中的索引",command=func3)
btn3.pack()
root.mainloop()
复选框Checkbutton:
介绍:复选框点击这个按钮将会在这两个值间切换。
参数设置:可⽤参数参考下⾯的,⽤法同样可以参考按钮Button的
variable:值为tkinter变量,可以使⽤ tkinter变量.get⽅法来获取是否选中
如果想要获取选中值,必须设置⼀个tkinter变量来获取,tkinter变量类型有:BooleanVar, DoubleVar, IntVar, StringVar 可⽤参数:activebackground, activeforeground, anchor,
background, bd, bg, bitmap, borderwidth, command, cursor,
disabledforeground, fg, font, foreground, height,
highlightbackground, highlightcolor, highlightthickness, image,
indicatoron, justify, offvalue, onvalue, padx, pady, relief,
selectcolor, selectimage, state, takefocus, text, textvariable,
underline, variable, width, wraplength
from tkinter import *
root=Tk()
root.title('我的窗⼝')
root.geometry('200x200')
def submit():
print('男:',v1.get(),'⼥:',v2.get(),'另外:',v3.get())#选择则值为1,不选中为0
# pass
v1 = IntVar() #⽤tkinter变量来表⽰按钮是否选中
v2 = IntVar()
v3 = IntVar()
# 使⽤ Checkbutton时,必须创建⼀个 Tkinter 变量⽤于存放按钮的状态:
cbtn=Checkbutton(root,text='男',variable=v1,command=submit)
cbtn2=Checkbutton(root,text='⼥',variable=v2,command=submit)
#v3是为了测试variable相同时,点⼀个,所有的v3都被选中
cbtn3=Checkbutton(root,text='不明',variable=v3,command=submit)
cbtn4=Checkbutton(root,text='保密',variable=v3,command=submit)
button=Button(text='submit',command=submit)
button.pack()
cbtn.pack()
cbtn2.pack()
cbtn3.pack()
cbtn4.pack()
root.mainloop()
Radiobutton:
介绍:代表⼀个变量,它可以有多个值中的⼀个。
点击它将为这个变量设置值,并且清除与这同⼀变量相关的其它radiobutton。
参数设置:可⽤参数参考下⾯的,⽤法同样可以参考按钮Button的
variable:值为tkinter变量,可以使⽤ tkinter变量.get⽅法来获取是否选中
value:根据前⾯的variable来决定数据类型,使⽤ tkinter变量.get⽅法此时获取的是选中选项的value的值Valid resource names: activebackground, activeforeground, anchor,
background, bd, bg, bitmap, borderwidth, command, cursor,
disabledforeground, fg, font, foreground, height,
highlightbackground, highlightcolor, highlightthickness, image,
indicatoron, justify, padx, pady, relief, selectcolor, selectimage,
state, takefocus, text, textvariable, underline, value, variable,
width, wraplength
from tkinter import *
root=Tk()
v=StringVar()
l=['man','woman','unknow']
def ptr():
print(v.get())
for i in l:
rbtn=Radiobutton(root,text=i,variable=v,value=i,command=ptr)
rbtn.pack()
root.mainloop()
Scale:
介绍:允许你通过滑块来设置⼀数字值。
介绍:允许你通过滑块来设置⼀数字值。
常⽤参数设置:
from_:设置滑块起始值
to:设置滑块最⼤值
orient:设置⽅向,默认是竖的,如果想改成⽔平的:orient=HORIZONTAL
Valid resource names:
activebackground, background, bigincrement, bd,
bg, borderwidth, command, cursor, digits, fg, font, foreground, from,
highlightbackground, highlightcolor, highlightthickness, label,
length, orient, relief, repeatdelay, repeatinterval, resolution,
showvalue, sliderlength, sliderrelief, state, takefocus,
tickinterval, to, troughcolor, variable, width
from tkinter import *
root=Tk()
root.title('我的窗⼝')
root.geometry('300x300+20+10')
scale=Scale(root,from_=0, to=100)#默认是竖的
scale2=Scale(root,from_=0, to=100,orient=HORIZONTAL)#横的
scale.pack()
scale2.pack()
root.mainloop()
Scrollbar:
介绍:为配合使⽤canvas, entry, listbox, and text窗⼝部件的标准滚动条。
参数设置:可⽤参数参考下⾯的,⽤法参考按钮Button的
Valid resource names:
activebackground, activerelief,
background, bd, bg, borderwidth, command, cursor,
elementborderwidth, highlightbackground,
highlightcolor, highlightthickness, jump, orient,
relief, repeatdelay, repeatinterval, takefocus,
troughcolor, width.
from tkinter import *
root=Tk()
root.title('我的窗⼝')
root.geometry('300x300+250+55')
button=Button(text='submit')
button.pack()
t1=Text(root,height=100,width=100,cursor='cross') slb=Scrollbar(root)
slb.pack(side=RIGHT,fill=Y)#设置滚动条的显⽰形式t1.config(yscrollcommand=slb.set)#设置允许滚动条#由于没有绑定事件,所以直接拖拽滚动条⽆效
t1.pack()
root.mainloop()
想要了解更多,可以参考tkinter的官⽅⽂档:。