一、介绍
tkinter模块是Python标砖的Tk GUI工具包的接口,无须安装任何包就可以直接使用。
tkinter可以在大多数的unix平台下使用,同样可以应用于windows、Linux和Macintsh等多种操作系统平台。
注意:千万别把Python的GUI程序命名成tkinter,或者把什么其他的程序命名成tkinter,只要命名成这个,一调用就会报这个错。AttributeError: module ‘tkinter’ has no attribute ‘Tk’
二、使用步骤
2.1 导入tkinter模块
import tkinter 或 from tkinter import *
2.2 创建主程序的顶层主窗口对象
主窗口对象top(名字任意),用于容纳程序所有可能的组件(widget)。
tktiner.TK() 返回的窗口时顶层窗口,一般命名为root或top。顶层窗口只能创建一次,并且在其他窗口创建之前被创建。
2.3 在主窗口中创建其他组件
在主窗口中创建其他组件,eg:标签(Label)、按钮(Button)、输入框(Entty)、框架(Frame)、菜单(Menu)、滚动条(Scrollbar)等。
组件既可以时独立的,也可以作为容器存在,作为容器的时候,它就是容器中组件的父组件。
2.4 将GUI模块与底层代码进行连接
将组件在窗口中显示并实现布局,有pack() 、grid() 、place() 布局方法。
2.5 进入主事件循环,响应由用户触发每个事件
组件会有一定行为和动作,eg:按钮被按下、进度条被拖动、文本框被写入等,这些用户行为被称为事件,针对事件的响应动作称为回调函数(callback)。
用户操作、产生事件,然后响应callback执行,整个过程称为事件驱动。
只有窗口内的对象处于循环等待状态,才能由某个事件引发窗口内的对象完成某种功能
import tkinter# from tkinter import*top = tkinter.Tk()label = tkinter.Label(top,text='hello world')label.pack() ##使用简单布局显示top.mainloop() ##进入事件循环##TK是模块tkinter的类,top是TK的实例
三、公共属性
3.1 ancher
定义控件在窗口内的位置或文件信息在控件内的位置。
N、NE、E、SE、S、SW、W、NW或CENTER
3.2 background(bg)
定义控件的背景颜色,可以使用表中的颜色,也可以使用”#rrggbb” 形式的数字
from tkinter import*win = Tk()win.title(string ='古诗鉴赏')Label(win,background="SystemHighlight", text="柳带摇风汉水滨,平芜两岸争匀").pack()Label(win,background="#00ff00", text="鸳鸯对浴浪痕新").pack()win.mainloop()
3.3 bitmap
3.4 borderwidth
定义控件的边框宽度,单位为像素
from tkinter import *win = Tk()##定义一个边框宽度为13像素的按钮Button(win,relief= RIDGE,borderwidth=13,text="关闭",command=win.quit).pack()win.mainloop()
3.5 command
定义动作发生时候使用的Python函数
from tkinter import *win = Tk()win.title(string="关闭程序")Button(win,text="关闭",command=win.quit).pack()win.mainloop()
3.6 cursor
定义当鼠标指针移动到控件上的时候,鼠标指针的类型。
cross(十字)、arrow(箭头)、watch(转圈圈)、xterm(竖杠)、fleur(上下左右箭头)
from tkinter import *win = Tk()Button(win,background='#FFE4B5', cursor='cross',text="关闭",command=win.quit).pack()Button(win,background='#FFE4E1',cursor='arrow',text="关闭",command=win.quit).pack()Button(win,background='#FFDAB9',cursor='watch',text="关闭",command=win.quit).pack()Button(win,background='#90EE90',cursor='xterm',text="关闭",command=win.quit).pack()Button(win,background='#E0FFFF',cursor='fleur',text="关闭",command=win.quit).pack()win.mainloop()
3.7 font
如果控件支持标题文字,定义标题文字的字体格式。
是一个元组格式(字体、大小、字体样式)。
字体样式可以是bold(加粗)、italic(斜体)、underline(下划线)、overstrike(划掉)
from tkinter import *win = Tk()Label(win,background='#FFE4B5',font=("Times",30,"bold"),text="独绕虚亭步石矼,静中情味世无双。").pack()Label(win,background='#FFE4E1',font=("Symbol",35,"bold overstrike"),text="山蝉带响穿疏户,野蔓盘青入破窗。").pack()Label(win,background='#90EE90',font=("宋体",40,"bold italic"),text="二子逢时犹死饿,三闾遭逐便沉江。").pack()Label(win,background='#90EE90',font=("Times",40,"bold italic underline"),text="My bucket list").pack()win.mainloop()
3.8 foreground(fg)
定义控件的前景(文字)颜色,颜色值可以是background那边那个表中的名称,也可以是rgb色的形式。
from tkinter import *win = Tk()Label(win,background='#FFE4E1',font=("Symbol",35,"bold "),text="长安寒食",foreground="#1C1C1C").pack()Label(win,background='#FFE4B5',font=("Times",30,"bold"),text="春日照九衢。春风媚罗绮。",foreground="#8B4726").pack()Label(win,background='#FFE4B5',font=("Times",30,"bold"),text="万骑出都门,拥在香尘里。",foreground="#8B4726").pack()Label(win,background='#FFE4B5',font=("Times",30,"bold"),text="莫辞吊枯骨,千载长如此。",foreground="#8B4726").pack()Label(win,background='#FFE4B5',font=("Times",30,"bold"),text="安知今日身,不是昔时鬼。",foreground="#8B4726").pack()Label(win,background='#FFE4B5',font=("Times",30,"bold"),text="但看平地游,亦见摧辀死。",foreground="#8B4726").pack()win.mainloop()
3.9 height
如果是Button、Label或Text控件,这个属性定义以字符数目为单位的高度。其他控件则是定义以像素pixel为单位的高度。
from tkinter import *win =Tk()Button(win,background='#FFE4B5',height=5,text="关闭",command=win.quit).pack()win.mainloop()
3.10 highlightbackground
定义控件在没有键盘焦点的时候,画highlight区域的颜色
3.11 highlightcolor
3.12 highlightthickness
3.13 width
如果是Button、Label或Text控件,这个属性定义以字符数目为单位的高度。其他控件则是定义以像素pixel为单位的高度。
from tkinter import *win =Tk()Button(win,background='#FFE4B5',width=20,text="关闭",command=win.quit).pack()win.mainloop()
3.14 image
3.15 justify
定义多行文本标题的排列方式,left, right, or center。
3.16 padx,pady
定义控件内的文本或图片与控件边框之间的水平和垂直距离。
from tkinter import *win = Tk()Button(win,background='#FFE4B5',width=20,text="关闭",command=win.quit,padx =20,pady =40).pack()win.mainloop()
3.17 relief
定义组件的边框形式,所有组件都是有边框的,不过有些组件的边框不可见。
3D形式的边框,属性可以是SUNKEN(下凹的)、RIDGE(山脊)、RAISED(凸起)或GROOVE(凹槽)
2D形式的边框,属性可以是FLAT(扁平)或SOLID(加粗)
from tkinter import *win = Tk()Button(win,background="#98FB98",relief=FLAT,text="关闭",command=win.quit).pack()Button(win,background="#98FB98",relief=SOLID,text="关闭",command=win.quit).pack()win.mainloop()
3.18 text
3.19 variable
将控件的数值映射到一个变量。当控件的数值改变的时候,这个变量也会跟着改变。同样,变量改变的时候,控件的数值也会跟着改变。
StringVar类、IntVar类、DoubleVar类和BooleanVar的实例变量,这些实例变量可以使用get() 和set() 方法读取与设置变量。
四、组件布局
4.1 pack()
将控件放置在父控件内之前,规划此控件在区块内的位置。
pack() 方法按照其内的属性设置,将控件放置在Frame控件(窗体)或窗口内。当用户创建一个Frame控件后,就可以将控件放入。Frame控件内存储控件的位置叫做parcel。
如果相将一组控件按照顺序放入,将这些控件的anchor的属性设为相同的。如果没有设置任何选项,这些控件就会从上而下排列。
语法格式:<>.pack([参数列表], ……)
| 参数 | 说明 | 取值范围 |
|---|---|---|
| side | 指定组件停靠在父组件的哪一个方向上 | top(默认值);bottom;left;right |
| fill | 指定水平(x)或垂直(y)方向填充 当属性side=”top” 或”bottom”时,填充x方向 当属性side=”left “或”right”时,填充y方向 |
x;y;both;none |
| expend | 当值为yes的时候,side选项无效,组件显示在父组件中心位值,如果fill选项位both的时候,则填充父组件的剩余空间 为0的时候,不占满,为1的时候,占满 |
yes;no;自然数;0 |
| anchor | 指定对齐方式 左对齐“w”、右对齐“e”、顶对齐“n”、底对齐“s” |
n;s;w;e;nw;sw;se;ne;center(默 认值) |
| ipadx, ipady | 与fill共同使用,组件内部在x(y)方向上填充的空间大小 默认单位说像素,可选单位c(厘米)、m(毫米)、i(英寸)、p(打印机的点,即1/27英寸) |
非负浮点数(默认值为0.0) |
| padx,pady | 与fill共同使用,组件外部在x(y)方向上填充的空间大小 默认单位说像素,可选单位c(厘米)、m(毫米)、i(英寸)、p(打印机的点,即1/27英寸) |
非负浮点数(默认值为0.0) |
| bofore | 先创建这个组件再创建选定组件 | 已经pack后的组件对象 |
| after | 先创建选定组件再创建本组件 | 已经pack后的组件对象 |
| in | 指定本组件的master为选定组件 | 已经pack后的组件对象 |
from tkinter import *##主窗体win = Tk()##第一个窗体frame1 = Frame(win,relief=RAISED,borderwidth=5) ##窗体的边框样式为凸起,边框厚度为5frame1.pack(side=TOP,fill=BOTH,ipadx=13,ipady=13,expand=0) ##窗体在窗口的顶端,fill=BOTH,窗体占满整个窗口的剩余空间Button(frame1,text="按钮1",background="#98FB98").pack(side=LEFT,padx=13,pady=13) ##按钮从左开始排列,控件之间的水平距离和垂直距离都是13像素Button(frame1,text="按钮2",background="#97FFFF").pack(side=LEFT,padx=13,pady=13)Button(frame1,text="按钮3",background="#7FFFD4").pack(side=LEFT,padx=13,pady=13)##第二个窗体frame2 = Frame(win,relief=GROOVE,borderwidth=5) ##窗体的边框样式为内陷,边框厚度为5frame2.pack(side=BOTTOM,fill=None,ipadx="1c",ipady="1c",expand=1) ##窗体在窗口的底端,fill=None,当窗口改变的时候,窗体不会占满整个窗口的剩余空间,控件和窗体边界的水平和垂直距离都是1cmButton(frame2,text="按钮4",background="#98FB98").pack(side=RIGHT,padx="1c",pady="1c") ##按钮从右开始排列,控件之间的水平距离和垂直距离都是1cmButton(frame2,text="按钮5",background="#97FFFF").pack(side=RIGHT,padx="1c",pady="1c")Button(frame2,text="按钮6",background="#7FFFD4").pack(side=RIGHT,padx="1c",pady="1c")##第三个窗体frame3 = Frame(win,relief=SUNKEN,borderwidth=5) ##窗体的边框样式为下凹的,边框厚度为5frame3.pack(side=LEFT,fill=X,ipadx="0.1i",ipady="0.1i",expand=1) #窗体在窗口的左端,fill=X,当窗口改变的时候,窗体会占满整个窗口剩余的水平空间,但是由于expand=1,窗体不会占满整个窗口的剩余空间,所以控件和窗体边界的水平和垂直距离都是0.1英寸Button(frame3,text="按钮7",background="#98FB98").pack(side=TOP,padx="0.1i",pady="0.1i")##按钮从上向下开始排列,控件之间的水平距离和垂直距离都是1英寸Button(frame3,text="按钮8",background="#97FFFF").pack(side=TOP,padx="0.1i",pady="0.1i")Button(frame3,text="按钮9",background="#7FFFD4").pack(side=TOP,padx="0.1i",pady="0.1i")##第四个窗体frame4 = Frame(win,relief=RIDGE,borderwidth=5) ##窗体的边框样式为山脊,边框厚度为5frame4.pack(side=RIGHT,fill=Y,ipadx="13p",ipady="13p",expand=1)#窗体在窗口的左端,fill=Y,当窗口改变的时候,窗体会占满整个窗口剩余的垂直控件。控件和窗体边界的水平和垂直距离都是13点Button(frame4,text="按钮10",background="#98FB98").pack(side=BOTTOM,padx="13p",pady="13p")##按钮从下向上开始排列,控件之间的水平距离和垂直距离都是13点Button(frame4,text="按钮11",background="#97FFFF").pack(side=BOTTOM,padx="13p",pady="13p")Button(frame4,text="按钮12",background="#7FFFD4").pack(side=BOTTOM,padx="13p",pady="13p")##开始窗口的事件循环win.mainloop()
4.2 grid()
grid()方法将空间按照表格的行列方式,来放置在窗体或窗口内
| 选项 | 说明 |
|---|---|
| row | 表格中的第几列 |
| column | 表格中的第几栏 |
| columnspan | 表格中合并栏的数目 |
| rowspan | 表格中合并列的数目 |
| ipadx, ipady | 组件内部在x(y)方向上填充的空间大小 默认单位说像素,可选单位c(厘米)、m(毫米)、i(英寸)、p(打印机的点,即1/27英寸) |
| padx,pady | 组件外部在x(y)方向上填充的空间大小 默认单位说像素,可选单位c(厘米)、m(毫米)、i(英寸)、p(打印机的点,即1/27英寸) |
| in_ | 指定本组件的master为选定组件 |
| sticky | 组件紧靠所在单元格的某一边 n;s;w;e;nw;sw;se;ne;center(默 认值) |
from tkinter import *##主窗口win = Tk()##创建窗体frame = Frame(win,relief=RAISED,borderwidth=5) ##窗体的边框样式为突起,边框厚度为5像素frame.pack(side=TOP,fill=BOTH,ipadx=5,ipady=5,expand=0) ##TOP,expand为0,窗口变化的时候,会占满整个窗口##创建按钮for i in range(5):for j in range(5):Button(frame,text="("+str(i)+"i"+str(j)+")",background="#98FB98").grid(row=i,column=j)##开始窗口的事件循环win.mainloop()
4.3 place()
palce() 设置控件在窗口或窗体内的绝对地址和相对地址。
| 选项 | 说明 |
|---|---|
| anchor | 定义控件在窗体或窗口内的方位。 N、W、E、S、SE、SW、NE、NW、CENTER。 默认是NE |
| bordermode | 定义控件的坐标是否要考虑边界的宽度 OUTSIDE或INSIDE,默认是INSIDE |
| height | 定义控件的高度,默认单位为像素 |
| weight | 定义控件的宽度,默认单位为像素 |
| in(in_) | 定义控件相对于参考控件的位置,如果使用在键值上,必须使用in_ |
| reheight | 定义控件相对于参考控件(使用in_选项)的高度 |
| reweight | 定义控件相对于参考控件(使用in_选项)的宽度 |
| relx | 定义控件相对于参考控件(使用in_选项)的水平位移。如果没有设置,则是相对于父控件 |
| rely | 定义控件相对于参考控件(使用in_选项)的垂直位移。如果没有设置,则是相对于父控件 |
| x | 定义控件的绝对水平位置,默认值为0 |
| y | 定义控件的绝对垂直位置,默认值为0 |
from tkinter import *##主窗体win =Tk()##创建窗体frame = Frame(win,relief=RAISED,borderwidth=5,width=400,height=300)frame.pack(side =TOP,fill = BOTH,ipadx=5,ipady=5,expand=1)##第一个控件botton1 = Button(frame,text="按钮1",background="#98FB98")botton1.place(x =40,y=40,anchor=W,width=80,height=80,)##第二个控件botton1 = Button(frame,text="按钮2",background="#7FFFD4")botton1.place(x =140,y=240,anchor=N,width=80,height=80)##开始窗口的事件循环win.mainloop()
五、tkinter的事件
事件处理例程(callback函数)
语法:
def function(event):……widget.bind("<event>" ,function)widget是tkinter控件的实例变量<event>是事件的名称function 是事件处理例程。tkinter会传给事件处理例程一个event变量,此变量包含事件发生时候的x,y坐标(鼠标事件)以及
5.1 事件的属性
当有事件发生的时候,tkinter会传给事件处理例程一个event变量,这个变量包含下面的属性
| 属性名称 | 说明 |
|---|---|
| char | 键盘的字符码,eg:”a”键的chr属性为”a”,”F1”键的caher属性无法显示 |
| keycode | 键盘的ASCII码,eg:”a”键的chr属性为65 |
| keysym | 键盘的符号,eg:”a”键的chr属性为”a”,”F1”键的caher属性等于”F1” |
| height,width | 控件的新高度与宽度,单位是像素 |
| num | 事件发生时的鼠标按键码 |
| widget | 事件发生所在的控件实例变量 |
| x,y | 目前的鼠标光标位置 |
| x_root,y_root | 相对于屏幕左上角的目前鼠标光标位置 |
| type | 显示事件的种类 |
5.2 事件绑定方法
| 方法 | 说明 |
|---|---|
| after(milliseconds[,callback [,arguments]]) | 在milliseconds事件后,调用callback函数,arguments是callback 函数的参数。 这个方法返回一个identifier的值,可以应用在after_cancle()方法 |
| after_cancel(identifier) | 取消callback函数,identifier是after()函数的返回值 |
| after_idle(callback,arguments) | 当系统在idle状态(无事可做)的时候,调用callback函数 |
| bindtags() | 返回控件所使用的绑定搜索顺序。返回值是一个元组,包含搜索绑定 所用的命名空间 |
| bind(event,callback) | 设置event事件的处理函数callback。 可以使用bind(event,callback,”+”)的格式设置多个callback函数 |
| bind_all(event,callback) | 设置event事件的处理函数callback。 可以使用bind_all(event,callback,”+”)的格式设置多个callback函数。 可以用于设置公用的快捷键 |
| bind_class(widgetclass,event,callback) | 设置event事件的处理函数callback,这个callback函数由widgetclass 类而来。 bind_class(widgetclass,event,callback,”+”)的格式设置多个callback函数。 |
| 此实例变量可以用于指示当空间的大小改变,或者移到新的位置 | |
| unbind(event) | 删除event事件与callback函数的绑定 |
| unbind_all(event) | 删除应用程序附属的event事件与callback函数的绑定 |
| unbind_class(event) | 删除event事件与callback函数的绑定。此callback函数由widgetclass 类而来。 |
5.3 鼠标事件
当处理鼠标事件的时候,1代表鼠标左键,2代表鼠标中间键,3代表鼠标右键。
| 事件 | 说明 |
|---|---|
| 此事件在鼠标指针进入控件的时候发生 | |
| 此事件在鼠标指针离开控件的时候发生 | |
| 此事件在控件上鼠标左键时发生。 |
|
| 此事件在单机鼠标左键,移动控件时发生 | |
| 此事件在释放鼠标左键时发生 | |
| 此事件在双击鼠标左键时发生 |
from tkinter import *##处理鼠标光标进入窗体时的事件def handleEnterEvent(event):label1["text"] ="你进入了窗口"label2["text"] =" "label3["text"] =" "##处理鼠标光标离开窗体时的事件def handleLeaveEvent(event):label1["text"] ="你离开了窗口"label2["text"] =""label3["text"] =""##处理在窗体内单击鼠标左键的事件def handLeftButtonPressEvent(event):label1["text"] ="你点击了左键"label2["text"] ="x= "+str(event.x)label3["text"] ="y= "+str(event.y)##处理在窗体内单击鼠标中间键的事件def handMiddleButtonPressEvent(event):label1["text"] ="你点击了中间键"label2["text"] ="x= "+str(event.x)label3["text"] ="y= "+str(event.y)##处理在窗体内单击鼠标右键的事件def handRightButtonPressEvent(event):label1["text"] ="你点击了右键"label2["text"] ="x= "+str(event.x)label3["text"] ="y= "+str(event.y)##处理在窗体内单击鼠标左键,然后移动鼠标光标的事件def handLeftButtonMoveEvent(event):label1["text"] ="你单击鼠标左键,并且移动了鼠标光标"label2["text"] ="x= "+str(event.x)label3["text"] ="y= "+str(event.y)##处理在窗体内放开鼠标左键的事件def hanleLeftButtonReleaseEvent(event):label1["text"] ="你放开了鼠标左键"label2["text"] ="x= "+str(event.x)label3["text"] ="y= "+str(event.y)##处理在窗体内双击鼠标左键的事件def hanleLeftButtonDoubleClickEvent(event):label1["text"] ="你双击了鼠标左键"label2["text"] ="x= "+str(event.x)label3["text"] ="y= "+str(event.y)##创建主窗体win = Tk()##创建窗体frame =Frame(win,relief=RAISED,borderwidth=5,width=300,height=200)frame.bind("<Enter>",handleEnterEvent)frame.bind("<Leave>",handleLeaveEvent)frame.bind("<Button-1>",handLeftButtonPressEvent)frame.bind("<ButtonPress-2>",handMiddleButtonPressEvent)frame.bind("<3>",handRightButtonPressEvent)frame.bind("<B1-Motion>",handLeftButtonMoveEvent)frame.bind("<ButtonRelease-1>",hanleLeftButtonReleaseEvent)frame.bind("<Double-Button-1>",hanleLeftButtonDoubleClickEvent)##文件标签,显示鼠标事件的种类label1 = Label(frame,text="没有事件发生",foreground="#98FB98",background="#FFFFFF")label1.place(x=16,y=20)##文字标签,显示鼠标事件发生时的x坐标label2 = Label(frame,text="x = ",foreground="#98FB98",background="#FFFFFF")label2.place(x=16,y=70)##文字标签,显示鼠标事件发生时的y坐标label3 = Label(frame,text="y =",foreground="#98FB98",background="#FFFFFF")label3.place(x=16,y=120)##设置窗体的位置frame.pack(side =TOP)##开始窗口的事件循环win.mainloop()
5.4 键盘事件
| 事件 | 说明 |
|---|---|
| ASCII码48-90时发生,即数字键、字母键及+ - 等符号 | |
| CTRL+UP组合键 | |
| 其他按键,使用其按键名称 |
from tkinter import *##处理在窗体内按下键盘按键(非功能键)的事件def handleKeyEvent(event):label1["text"]="你按下了"+event.keysym + '键\n'label1["text"] +="keycode"+str(event.keycode) ## 接在label1上一行的后面##创建主窗口win = Tk()##创建窗体frame =Frame(win,relief=RAISED,borderwidth=5,width=300,height=200)##将主窗口与键盘事件连接eventType =["Key","Control-Up","Return","Escape","F1","F2","F3","F4","F5","F6","F7","F8","F9","F11","F12","Num_Lock","Scroll_Lock","Caps_Lock","Print","Insert","Delete","Pause","Prior","Next","BackSpace","Tab","Cancel","Control_L","Alt_L","Shift_L","End","Home","Up","Down","Left","Right"]for type in eventType:win.bind("<"+type+">",handleKeyEvent)##文字标签,显示键盘事件的种类label1 = Label(frame,text="没有事件发生",foreground="#1C1C1C",background="#FFFFFF")label1.place(x=15,y=20)##设置窗体的位置frame.pack(side =TOP)##开始窗口的事件循环win.mainloop()
5.5 窗体事件
| 事件 | 说明 |
|---|---|
| 当组件变为可视状态时触发 | |
| 当组件由显示状态变为隐藏状态时触发 | |
| 当组件由隐藏状态变为显示状态时触发 | |
| 当组件由原本被其他组件遮盖的状态中暴露出来时触发 | |
| 组件获得焦点时触发 | |
| 组件失去焦点时触发 | |
| 当组件被销毁时触发 |
5.6 系统协议
tkinter提供协议处理例程(protocol heandle),拦截系统信息的机制,用户可以拦截这些系统信息,然后设置成字节的处理例程
通常处理的协议:
| 协议 | 说明 |
|---|---|
| WM_DELETE_WINDOW | 当系统要关闭该窗口时发生 |
| WM_TAKE_FOCUS | 当应用程序得到焦点时发生 |
| WM_SAVE_YOUTSELF | 当应用程序需要存储内容时发生 |
语法格式:
widget.protocol(protocol,funnction_handler)
widget必须是一个Toplevel控件。
from tkinter import *import tkinter.messagebox##处理WM_DELETE_WINDOW事件def handeleProtocol():#打开一个确定/取消会话框if tkinter.messagebox.askokcancel("提示","你确定要关闭窗口吗?"):##确定要结束应用程序win.destroy()##创建主窗口win = Tk()##创建协议win.protocol("WM_DELETE_WINDOW",handeleProtocol)##开始窗口的的事件循环win.mainloop()
六、tkinter控件
tkinter包含15个控件
| 控件名称 | 说明 |
|---|---|
| Buttom | 按钮控件,在程序中显示一个按钮 |
| Canvas | 画布控件,用来画图形,eg:线条即多边形等 |
| Checkbutton | 多选框控件,用于在程序中提供多项选择框 |
| Entry | 输入控件,定义一个简单的文本输入字段 |
| Frame | 框架控件,定义一个窗体,以作为其他控件的容器 |
| Label | 标签控件,定义一个文字或图片标签 |
| Listbox | 列表框控件,定义一个下拉方块 |
| Menu | 菜单控件,定义一个菜单栏、下拉菜单何弹出菜单 |
| Menubuttom | 菜单按钮控件,用于显示菜单栏 |
| Message | 消息控件,定义一个对话框 |
| Radiobutton | 单选按钮控件,定义一个单选按钮 |
| Scale | 范围控件,定义一个滑动条,以帮助用户设置数值 |
| Scrollbar | 滚动条控件,定义一个滚动条 |
| Text | 文本控件,定义一个文本框 |
| Toplevel | 与Frame控件类似,可以作为其他控件的容器。 整个控件有字节的最上层窗口,可以提供窗口管理接口 |
6.1 Button 控件
Button控件用于创建按钮,按钮内可以显示文字或图片
| 方法名称 | 说明 |
|---|---|
| flash() | 将前景与背景颜色互换,以产生闪烁的效果 |
| invoke() | 执行commad属性所定义的函数 |
| 属性名称 | 说明 |
|---|---|
| activebackground | 按钮在作用时的背景颜色 |
| activeforeground | 按钮在作用时的前景颜色 |
| bitmap | 显示在按钮上的位图,这个属性只有在忽略image属性的时候才有用。 一般可以设置gary12,gary25,gary50,gary75,hourglass、error、questhead、info、warning或queetion,也可以直接使用XBM( X Bitmap文件)eg:bitmap=@hello.xbm |
| default | 默认按钮 |
| disabledforeground | 按钮在无作用时的前景颜色 |
| image | 显示在按钮上的图片,这个属性的顺序在text和bitmao属性之前 |
| state | 定义按钮的属性。NORMAL(正常)、ACTIVE(激活)、DISABLED(禁用) |
| takefocus | 定义用户是否可以使用Tab键来改变按钮的焦点 |
| text | 显示在按钮上的文字,如果定义了image和bitmap属性,text属性就不会显示 |
| underline | 一个整数偏移值,表示按钮上的文字哪一个字符要加下划线,第一个字符的偏移值为0 |
| wraplength | 一个以屏幕单位(screen unit)为单位的距离值,用来决定按钮上的文字在哪里需要换成多行。 默认值是不换行 |
| command | 指定按钮的事件处理函数 |
from tkinter import *win = Tk()##设置按钮作用时的前景颜色和背景颜色button1 = Button(win,activeforeground="#FF4040",activebackground="#FFDEAD",text="关闭",command=win.quit).pack()##设置bitmapbutton2 = Button(win,bitmap="question",text="bitmap",command=win.quit).pack()##设置text和bitmap,但是由于有bitmap,所以text不生效button3 = Button(win,bitmap="info",text="bitmap",command=win.quit).pack()##在第三个字符下面加下划线button4 = Button(win,text="今天也要加油鸭!",underline=2,command=win.quit).pack()##开始窗口的的事件循环win.mainloop()
6.2 Canvas 控件
Canvas控件用于创建与显示图形,eg:弧形、位图、图片、线条、椭圆形、多边形及矩形等
| 方法 | 说明 |
|---|---|
| create_arc(coord,start,exten,fill) | 创建一个弧形 coord定义画弧形区块的左上角和右下角坐标 start定义画弧形区块的起始角度(逆时针方向) extent定义画弧形区块的结束角度(逆时针) fill定义填满弧形区块的颜色 |
| create_bitmap(x,y,bitmap) | 创建一个位图 x和y定义位图的左上角坐标 bitmap定义位图的来源,可以为gary12,gary25,gary50,gary75,hourglass、error、questhead、info、warning或queetion,也可以直接使用XBM( X Bitmap文件)eg:bitmap=@hello.xbm |
| create_image(x,y,image) | 创建一个图片 x和y定义图片的左上角坐标 image定义图片的来源,必须是tkinter模块的BitmapImage类或PhotoImage类的实例变量 |
| create_line(x0,y0,x1,y1,……,xn,yn,options) | 创建一个线条 x0,y0,x1,y1,……,xn,yn 定义线条的坐标 optinos可以是width或fill width定义线条的宽度,默认为1像素 fill定义线条的颜色,默认为black |
| create_oval(x0,y0,x1,y2,options) | 创建一个圆形或椭圆形 x0和y0定义绘图区域的左上角坐标 x1和y1定义回值区域的右下角坐标 optinos可以是outline或fill outline定义圆形或椭圆形的外围颜色 fill定义填满圆形或椭圆形的颜色,默认值为empty(透明) |
| create_polygon(x0,y0,x1,y1……,options) | 创建一个至少三个点的多边形 x0,y0,x1,y1,……,xn,yn 定义多边形的坐标 optinos可以是outline、fill或splinesteps outline定义圆形或椭圆形的外围颜色,默认值为balck fill定义填满多边形的颜色,默认值为black splinesteps是一个整数,定义曲线的平滑度 |
| create_rectangle(x0,y0,x1,y1,options) | 创建一个矩形 x0和y0定义矩形的左上角坐标 x1和y2定义矩形的右下角坐标 optinos可以是outline或fill outline定义圆形或椭圆形的外围颜色,默认值为balck fill定义填满圆形或椭圆形的颜色,默认值为empty(透明) |
| create_text(x0,y0,text,options) | 创建一个文字字符串 x0和y0定义字符串的左上角坐标 text定义文字字符串的文字 options可以是anchar或fill anchar定义(x0,y0)在文字字符串内的位置,可以是N、NE、E、SE、S、SW、W、NW或CENTER 默认值是CENTER fill定义文字字符串的颜色,默认值为empty(透明) |
- 报错
python报错: _tkinter.TclError: couldn’t recognize data in image file
用tkinter只能装入GIF图片,也就是扩展名是.gif的图片文件,想要显示其他类型的图片,如png或jpg,需要用到其它模块
from tkinter import *win = Tk()win.wm_title("Canvas组件示例")##创建一个弧形coord = 13,50,240,213canvas1 = Canvas(win)canvas1.create_arc(coord,start=0,extent=270,fill="#98FB98")canvas1.pack(side=TOP)##创建一个位图canvas2 = Canvas(win)canvas2.create_bitmap(20,20,bitmap="warning")canvas2.pack(side=TOP)##创建一个图片canvas3 = Canvas(win)img = PhotoImage(file="C:/Users/lh/Desktop/lhuan.gif")canvas3.create_image(20,280,image=img)canvas3.place(x=40,y=200)##创建一个线条canvas4 = Canvas(win)canvas4.create_line(150,200,175,250,20,150,width=5,fill="#8B1A1A")canvas4.pack()win.mainloop()

from tkinter import *win = Tk()win.wm_title("Canvas组件示例")##画一个圆形canvas1 =Canvas(win)canvas1.create_oval(10,10,100,100,fill="#FFE4B5",outline="#FFFF00")canvas1.pack()##画一个三角形canvas2 =Canvas(win)canvas2.create_polygon(30,30,150,150,120,180,fill="#FFE4B5",outline="#FFFF00",splinesteps=1)canvas2.pack()##画一个矩形canvas3 =Canvas(win)canvas3.create_rectangle(80,80,200,200,fill="#FFE4B5",outline="#FFFF00")canvas3.pack()##创建一个文字字符串canvas4 =Canvas(win)canvas4.create_text(125,5,text="白莲庭院皆生妙处",fill="black",anchor=N)canvas4.pack()##开始窗口的的事件循环win.mainloop()
6.3 Checkbutton 控件
Checkbutton控件用于创建复选框
| 属性 | 说明 |
|---|---|
| onvlaue,offvalue | 设置Checkbutton控件的variable属性指定的变量,所要存储的数值 如果复选框没有被选中,值为offvalue 如果复选框被选中,值为onvalue |
| indicatoron | 置为0,可以将整个控件变成复选框 |
| 方法 | 说明 |
|---|---|
| select() | 选中复选框,并设置变量的值为onvalue |
| flash() | 将前景和背景颜色互换,以产生闪烁的效果 |
| invoke() | 执行command属性所定义的函数 |
| toggle() | 改变复选框的状态,如果复选框现在的状态是on,就改为off,如果是off,就改为on |
from tkinter import *win = Tk()win.wm_title("Checkbutton组件示例")check1 = Checkbutton(win,text="apple")check2 = Checkbutton(win,text="pear")check3 = Checkbutton(win,text="orange")##选中按钮1check1.select()check1.pack(side=LEFT)check2.pack(side=LEFT)check3.pack(side=LEFT)##开始窗口的的事件循环win.mainloop()
6.4 Entry 控件
Entry控件用于在窗体或窗口内创建一个单行文本框。
| 属性 | 说明 |
|---|---|
| insertwidth | 输入框光标的宽度 |
| insertonotime | 输入框光标闪烁时,显示持续时间,单位:毫秒(ms),默认值为600ms |
| insertofftime | 输入框光标闪烁时,消失持续时间,单位:毫秒(ms),默认值为300ms |
| justify | 当输入的文本不适应输入框时的显示方式 left/center/wight,默认为left |
| show | 指定输入框内容显示为字符,eg:显示密码可以将值设为* |
| textvariable | 输入框的值,是一个StringVar()对象 |
| xscrollcommand | 建立与滚动条组件的联系,设置为滚动条组件的.set方法 |
| 方法 | 说明 |
|---|---|
| inster(index,text) | 向输入框中输入字符,index:插入位置,text:插入内容 |
| delete(first,last) | 删除输入框中从first到last(不包含last)的字符串 |
| get() | 获取输入框的字符串值 |
| select_clear() | 清除输入框选择的内容 |
| icursor(index) | 将光标移动到index索引位置前,文框获取焦点后成立 |
| index(index) | 返回指定的索引值,保证index位置上的字符是输入框最左侧的可视字符 |
| select_range(start,end) | 选中start索引与end索引之前的值,start必须小于end |
from tkinter import *win = Tk()win.wm_title("计算器")##创建窗体frame = Frame(win)##创建一个计算器def calc():#将用于输入的表达式,计算结果后转换成字符串result = "=" +str(eval(expression.get()))#将计算的结果显示在Label控件上label.config(text=result)##创建一个label控件label = Label(frame)##创建一个Entry控件entry = Entry(frame)##读取用户输入的表达式expression = StringVar()##将用户输入的表达式显示在Entry控件上entry["textvariable"] = expression##创建一个Button控件,当用户输入完毕之后,单击此按钮即计算表达式的结果button1 = Button(frame, text="等于",command=calc)##设置Entry控件为焦点所在entry.focus()frame.pack()entry.pack()label.pack(side = LEFT)button1.pack(side = RIGHT)##开始窗口的的事件循环win.mainloop()
6.5 Label 控件
label用于创建一个显示方块,可以在这个显示方块中放置图片或文字。
| 属性 | 说明 |
|---|---|
| text | 文字,多行以“\n”分割 |
| windth | 标签的宽度,显示文本,以单个字符大小为单位,显示图像,以像素为单位 |
| height | 标签的高度,显示文本,以单个字符大小为单位,显示图像,以像素为单位 |
| anchar | 文本或图像在背景内容区的位置, |
| background(bg) | N、NE、E、SE、S、SW、W、NW或CENTER 默认值是CENTER |
| relief | 边框样式,flat(默认)/sunken/raised/groove/ridge |
| borderwidth(bd) | 边框的宽度,单位是像素 |
| font | 字体和字体的大小,font=(font_name,size) |
| justify | 指定文本对齐方式,center(默认)/left/right |
| foreground(fg) | 指定文本(或图像)颜色 |
| underline | 单个字符添加下划线 |
| bitmap | 指定标签上显示的位图 |
| image | 指定标签上显示的图片 |
| compound | 文本的图像的位置关闭。None(默认,即显示图像不显示文本) bottom/top/left/right 图片显示在文本的下/上/左/右 center 文本显示在图片中心上方 |
| activebackground | 设置Label处于活动状态下的背景颜色,默认由系统指定 |
| activeforground | 设置Label处于活动状态下的前景颜色,默认由系统指定 |
| disableforground | 指定当Label不可用的状态Disable下的前景颜色,默认由系统指定 |
| cursor | 指定鼠标经过Label的时候,鼠标的样式 |
| state | 指定Label的状态,用于控制Label如何显示 normal/active/disable |
from tkinter import *win = Tk()win.wm_title("Label控件示例")label1 = Label(win,text="我们读书而后知道自己并不孤单。\n ----《岛上书店》",height=10,width=50,relief=RAISED,background="white",foreground="black",anchor='center',font=("宋体",20),cursor='man')label1.pack()##x是tkinter的PhotoImage实例化后的实例变量x = PhotoImage(file="C:/Users/lh/Desktop/lhuan.gif")label2 =Label(win,image=x,text="图片",compound="bottom")label2.pack()#开始窗口的的事件循环win.mainloop()
6.6 Listbox 控件
Listbox控件用于创建一个列表框。列表框内包含多个选项,用户可以只选择一个或者多个
| 属性 | 说明 |
|---|---|
| height | 设置列表框的行数目,如果为0,自动设置为能找到的最大选择项数目 |
| selectmode | 设置列表框的种类 SINGLE:单选 BROWSE:单选,拖动鼠标或通过方向键可以选择多行 MULTIPLE:多选 EXTENDED:多选,但需要同时按住shift键或Ctrl键或者拖拽鼠标实现 |
| width | 设置每一行的字符数目,如果为0,自动设置为能找到的最大字符数目 |
| xscrollcommand | 水平滚动条联系变量 |
| yscrollcommand | 垂直滚动条联系变量 |
| listvaribale | 列表框内容的StringVar变量,可以用.get() 方法得到列表框内容的字符串 |
| 方法 | 说明 |
|---|---|
| delete(row[,lastrow] | 删除指定和row,或者删除row或lastrow之间的行 |
| get(row) | 取得指定行row内的字符串 |
| insert(row,string) | 在指定列row插入字符串string |
| see(row) | 将指定行row变成可视 |
| select_clear() | 清除选择项 |
| select_set(startrow,endrow) | 选择startrow与endrow之间的行 |
| curselection() | 获取选中列表项索引值的元组 |
from tkinter import *win = Tk()win.wm_title("Listbox 控件示例")##创建窗体frame = Frame(win)##创建列表框选项列表name = ["芝芝草莓","可乐冰茶","草莓星冰乐","蓝莓星冰乐","草莓奶昔","柠檬百香果"]##创建Listbox控件listbox =Listbox(frame)##清除Listbox控件的内容listbox.delete(0,END)##在Listbox控件内插入选项for i in range(5):listbox.insert(END, name[i])listbox.pack()frame.pack()#开始窗口的的事件循环win.mainloop()
6.7 Menu 控件
Menu控件用于创建三种类型的菜单,pop-up(快捷式菜单)、toplevel(主目录)及pull-down(下拉式菜单)
| 方法 | 说明 |
|---|---|
| add_command(options) | 新增一个菜单项 |
| add_radiobuttom(options) | 创建一个选择纽菜单栏 |
| add_checkbutton(options) | 创建一个复选框菜单栏 |
| add_cascade(options) | 将指定的菜单与其菜单连接,创建一个新的级联菜单 |
| add_separartor() | 新增一个分割线 |
| add(type,options) | 新增一个特殊类型的菜单栏 |
| delete(startindex [,endindex]) | 删除startindex到endindex之间的菜单栏 |
| entryconfig(index,options) | 修改index菜单栏 |
| index(item) | 返回索引值的菜单栏选项 |
| 方法 | 说明 |
|---|---|
| accelerator | 设置菜单栏的快捷键,快捷键会显示在菜单项目的右边。 ps:这个选项不会自动将快捷键与菜单栏连接在一起,必须另行设置 |
| command | 选择菜单项时执行的callback函数 |
| indicatorOn | 设置此属性,让菜单栏选择on或off |
| label | 定义菜单栏内的文字 |
| menu | 此属性与add_cascade() 方法一起使用,用来新增菜单栏的子菜单栏 |
| selectColor | 菜单栏on或off的颜色 |
| state | 定义菜单栏的状态,可以是normal、active、disabled |
| onvaue,offvalue | 存储在variable属性内的数值。 在选择菜单栏时,将onvalue内的数值复制到variable属性内 |
| tearOff | 如果这个选项为True,在菜单项目的上面就会显示一个可选择的分割线。 这个分割线,会将此菜单栏分离出来成为一个新的窗口 |
| underline | 设置菜单栏中哪一个字符要有下划线 |
| value | 选择按钮菜单项的值 |
| variable | 用于存储数值的变量 |
6.7.1 toplevel 主菜单
from tkinter import *import tkinter.messagebox##创建主菜单win = Tk()##执行菜单命令,显示一个对话框def doSomething():tkinter.messagebox.askokcancel("菜单","你正在选择菜单命令")##创建一个主目录(toplevel)mainmenu = Menu(win)##新增菜单项mainmenu.add_command(label= "文件",command=doSomething)mainmenu.add_command(label= "编辑",command=doSomething)mainmenu.add_command(label= "视图",command=doSomething)mainmenu.add_command(label= "窗口",command=doSomething)mainmenu.add_command(label= "帮助",command=doSomething)##设置主窗口的菜单win.config(menu=mainmenu)##开始程序循环win.mainloop()
6.7.2 pop-up 快捷式菜单
from tkinter import *import tkinter.messagebox##创建主窗口win = Tk()##执行菜单命令,显示一个对话框def doSomething():tkinter.messagebox.askokcancel("菜单","你正在选择快捷式菜单命令")##创建一个快捷式菜单(pop-up)popupmenu = Menu(win,tearoff=0)##新增快捷式菜单的项目popupmenu.add_command(label="复制",command=doSomething)# ##添加分割线popupmenu.add_separator()popupmenu.add_command(label="粘贴",command=doSomething)popupmenu.add_separator()popupmenu.add_command(label="剪切",command=doSomething)popupmenu.add_separator()popupmenu.add_command(label="删除",command=doSomething)popupmenu.add_separator()##在点击鼠标右键的窗口(x,y)座标出,显示此快捷式菜单def showpopupMenu(event):popupmenu.post(event.x_root,event.y_root)##设置单击鼠标右键后,显示此快捷式菜单win.bind("<Button-3>",showpopupMenu)##开始程序循环win.mainloop()
单击鼠标右键之后 
6.7.3 pull-down 下拉式菜单
##创建一个下拉式菜单from tkinter import *import tkinter.messagebox##创建主窗口win =Tk()##执行[文件/新建]菜单命令,显示一个对话框def doFileNewCommand(*arg):tkinter.messagebox.askokcancel("菜单","你正在选择'新建'菜单命令")##执行[文件/打开]菜单命令,显示一个对话框def doFileOpenCommand(*arg):tkinter.messagebox.askokcancel("菜单","你正在选择'打开'菜单命令")##执行[文件/保存]菜单命令,显示一个对话框def doFileSaveCommand(*arg):tkinter.messagebox.askokcancel("菜单","你正在选择'保存'菜单命令")##执行[帮助/档]菜单命令,显示一个对话框def doHelpContentsCommand(*arg):tkinter.messagebox.askokcancel("菜单","你正在选择'帮助文档'菜单命令")def doHelpCommand(*arg):tkinter.messagebox.askokcancel("菜单","你正在选择'关于'菜单命令")##创建一个下拉式菜单(pull-down)mainmenu = Menu(win)##新增“文件”菜单的子菜单filemenu = Menu(mainmenu,tearoff=0)##新增“文件”菜单的菜单项filemenu.add_command(label ="新建",command=doFileNewCommand,accelerator ="Ctrl-N") ##设置快捷键filemenu.add_command(label ="打开",command=doFileOpenCommand,accelerator ="Ctrl-O")filemenu.add_command(label ="保存",command=doFileSaveCommand,accelerator="Ctrl-S")filemenu.add_command(label ="退出",command=win.quit)##新增“文件”菜单mainmenu.add_cascade(label="文件",menu=filemenu) ##创建新的级联菜单##新增"帮助"菜单的子菜单helpmenu = Menu(mainmenu,tearoff=0)##新增”帮助“菜单的菜单项helpmenu.add_command(label="文档",command=doHelpContentsCommand,accelerator="F1")helpmenu.add_command(label="关于",command=doHelpCommand,accelerator="Ctrl-A")##新增”帮助菜单“mainmenu.add_cascade(label="帮助",menu=helpmenu)##设置主窗口的菜单win.config(menu = mainmenu)##设置键盘事件绑定win.bind("<Control-N>",doFileNewCommand)win.bind("<Control-n>",doFileNewCommand)win.bind("<Control-O>",doFileOpenCommand)win.bind("<Control-o>",doFileOpenCommand)win.bind("<Control-S>",doFileSaveCommand)win.bind("<Control-s>",doFileSaveCommand)win.bind("<Control-A>",doHelpCommand)win.bind("<Control-a>",doHelpCommand)win.bind("<F1>",doHelpContentsCommand)##开始程序循环win.mainloop()
6.8 Message 控件
Message控件用于显示多行、不可编辑的文字。Message会自动分行,并编排文字的位置。
from tkinter import *##创建主窗口win = Tk()txt = "君不见黄河之水天上来,奔流到海不复回。君不见高堂明镜悲白发,朝如青丝暮成雪。人生得意须尽欢,莫使金樽空对月。天生我材必有用,千金散尽还复来。烹羊宰牛且为乐,会须一饮三百杯。"msg = Message(win,text=txt)msg.pack()##开始窗口的的事件循环win.mainloop()
6.9 Radiobutton 控件
Radiobutton控件用于创建一个单选按钮。
为了让一群单选按钮可以执行相同的功能,必须设置这群单选按钮variable属性为相同值,value属性就是各单选按钮的数值。
| 属性 | 说明 |
|---|---|
| command | 当用户选中此单选按钮时,所调用的函数 |
| variable | 当用户单选中单选按钮时,要更新的变量 |
| width | 当用户选中此单选按钮时,要存储在变量中的值 |
| 方法 | 说明 |
|---|---|
| flash() | 将前景与背景颜色互换,以产生闪烁的效果 |
| invoke() | 执行command属性所定义的函数 |
| select() | 选择此单选按钮,将variable变量的值设置为value |
from tkinter import *##创建主窗口win =Tk()win.wm_title("创建单选按钮")##饮品列表drinks = ["芝芝草莓","草莓星冰乐","草莓优格","杨枝甘露","草莓果冻","芝士草莓蛋糕","冰博克牛奶","草莓桃桃酸奶"]##将用户的选择显示在Label标签上def showSelection():choice = "你的选择: "+ drinks[var.get()]label.config(text=choice)##读取用户的选择值,是一个整数var =IntVar()for i in range(len(drinks)):Radiobutton(win,text=drinks[i],variable=var,value=i,command=showSelection).pack(anchor=W)##创建文字标签,用于显示用户的选择label = Label(win)label.pack()##开始窗口的的事件循环win.mainloop()
from tkinter import *##创建主窗口win = Tk()win.wm_title("创建命令型的单选按钮")##饮品列表drinks = ["柠檬红茶","柠檬百香果","柠檬绿茶","金桔柠檬","冰鲜柠檬水","香水青柠","柚子柠檬","紫宁柠檬茶"]##将用户的选择显示在Label标签上def showSelection():choice = "你的选择是: "+drinks[var.get()]label.config(text=choice)##读取用户的选择值,是一个整数var= IntVar()for i in range(len(drinks)):##创建单选按钮radioi=Radiobutton(win,text=drinks[i],variable=var,value=i,command=showSelection)##将单选按钮的外型,设置成命令型按钮radioi.config(indicatoron=0)##将单选按钮靠左对齐radioi.pack(anchor=W)##创建文字标签,用于显示用户的选择label = Label(win)label.pack()##开始窗口的事件循环win.mainloop()
6.10 Sacle 控件
Scale控件用于创建一个标尺式的滑动条对象,让用户可以移动标尺上的光标来设置数值。
| 方法 | 说明 |
|---|---|
| get() | 取得目前标尺上的光标值 |
| set(value) | 设置当前标尺上的光标值 |
from tkinter import *from string import *##创建主窗口win = Tk()win.wm_title("选择RGB颜色的滑块控件")## 将标尺上的0-130范围内的数字转换为0-255范围的16进制数字,然后再转换为两个字符的字符串,如果数字只有一位,就在前面一位加一个零def getRBGStr(value):ret = str(hex(int(value/133*255)))##将十六进制为数字前面的0x去掉ret = ret[2:4]##转换成两个字符的字符串,如果数字只有一位,就在前面加一个零#zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0。ret = ret.zfill(2)return ret##将RGB颜色的字符转成为#rrggbb 类型的字符串def showRGBColor():##读取rr部分strR = getRBGStr(var1.get())##读取gg部分strG = getRBGStr(var2.get())##读取bb部分strB = getRBGStr(var3.get())##转换成#rrggbb类型的字符串color = "#"+strR+strG+strB#将颜色字符串设置为Label控件的背景颜色colorBar.config(background=color)##读取标尺var1 =DoubleVar()var2 =DoubleVar()var3 =DoubleVar()##创建标尺scale1=Scale(win,variable=var1)scale2=Scale(win,variable=var2)scale3=Scale(win,variable=var3)##将选择按钮向左对齐scale1.pack(side=LEFT)scale2.pack(side=LEFT)scale3.pack(side=LEFT)##创建一个标签,用于显示颜色字符串colorBar = Label(win,text=""*40,background="#000000",width="20",height="5")colorBar.pack(side=LEFT)##创建一个按钮,单击后将标尺上的RGB颜色显示在Label控件上button = Button(win,text="查看颜色",command=showRGBColor)button.pack(side=LEFT)##开始窗口的事件循环win.mainloop()
6.11 Scalebar 控件
Scalebar控件用于创建一个水平或垂直的滚动条,可与Listbox、Text、Canvas等控件共同使用来移动显示的范围。
| 方法 | 说明 |
|---|---|
| set(first,last) | 设置目前的显示范围,在0-1之间 |
| get() | 返回目前的滚动条 |
from tkinter import *##创建主窗口win=Tk()win.wm_title("滚动条控件")##创建一个水平滚动条scrollbar1 = Scrollbar(win,orient=HORIZONTAL)##水平滚动条位于窗口底端,当窗口改变大小的时候会在x方向填满窗口,x需要大写scrollbar1.pack(side=BOTTOM,fill=X)##创建一个垂直滚动条scrollbar2 = Scrollbar(win,orient=VERTICAL)##垂直滚动条位于窗口右端,当窗口改变大小的时候会在y方向填满窗口scrollbar2.pack(side=RIGHT,fill=Y)##创建一个列表框,x方向的滚动条是scrollbar1对象的set()方法,y方向的滚动条是scrollbar2对象的set()方法mylist = Listbox(win,xscrollcommand=scrollbar1.set,yscrollcommand=scrollbar2.set,width=100)##在列表中插入20个选项for i in range(20):mylist.insert(END,"汉皇重色思倾国,御宇多年求不得。杨家有女初长成,养在深闺人未识。天生丽质难自弃,一朝选在君王侧。回眸一笑百媚生,六宫粉黛无颜色。春寒赐浴华清池,温泉水滑洗凝脂。"+str(i))##列表框位于窗口的左端,当窗口改变的时候会在x和y方向上填满窗口mylist.pack(side=LEFT,fill =BOTH)##移动水平滚动条,改变列表框的x方向可见范围scrollbar1.config(command=mylist.xview)##移动垂直滚动条,该表列表框的y方向可见范围scrollbar2.config(command=mylist.yview)## 开始窗口的事件循环win.mainloop()
6.12 Text 控件
Text控件用于创建一个多行、格式化的文本框。
| 属性 | 说明 |
|---|---|
| state | normal或disabled normal表示此文本框可以编辑内容 disabled表示此文本框不可编辑内容 |
| tabs | tab位置的列表 列表的元素是tab位置的索引值,再加上一个调整字符l、r、c l:left、r:right、c:center |
| 方法 | 说明 |
|---|---|
| delete(startindex [,endindex] | 删除特定位置的字符,或者一个范围内的文字 |
| get(startindex[,endindex] | 返回特定位置的字符,或者一个范围内的文字 |
| index(index) | 返回指定索引值的绝对值 |
| insert(index [,string]……) | 将字符串插入指定索引值的位置 |
| see(index) | 如果指定索引值的文字是可见的,就返回T |
6.11.1 Mark
Mark用作书签,可以帮助用户快速找到文本框内容的指定位置。
INSERT:指定光标插入的位置
CURRENT:指定鼠标光标最近的位置
| 方法 | 说明 |
|---|---|
| index(mark) | 返回书签行与列的位置 |
| mark_gravity(mark [,gravity]) | 返回书签的gravity。如果指定了gravity参数,就设置gravity为书签。 这个方法用在要将插入的文字准确地放在书签的位置时 |
| mark_names() | 返回Text控件的所有书签 |
| mark_set(mark,index) | 设置书签的新位置 |
| mark_unset(mark) | 删除Text控件的指定书签 |
6.11.2 Tag
Tag用来将一个范围内的文字指定一个标签名称,也可以用于将一个范围与一个callback函数连接。
| 方法 | 属性 |
|---|---|
| tag_add(tagname,startindex [,endindex]……) | 将startindex到endindex之间范围指定为tagname名称 |
| tag_config() | 用来设置tag属性 选项可以是justify,值可以是left、right、center 选项可以是tabs,tabs与Text控件的tag属性功能相同 选项可以是underline,在标签文字内加下划线 |
| tag_delete(tagname) | 删除指定的tag标签 |
| tag_remove(tagname,startindex [,endindex]……) | 将startinde到endindex之间的范围指定的tag标签删除 |
6.11.1 Index
Index用于指定字符的真实位置。
from tkinter import *##创建主窗口win =Tk()win.wm_title("Text控件")##创建一个Text控件text = Text(win)##在Text控件中插入一段文字text.insert(INSERT,"鸳鸯瓦冷霜华重,翡翠衾寒谁与共?\n")##跳下一行text.insert(INSERT,"\n")##在Text控件中插入一个按钮button = Button(win,text="关闭",command=win.quit)text.window_create(END,window=button)text.pack(fill=BOTH)##在第一行文字的中插入标签,printtext.tag_add("print","1.5","1.7")##将插入的按钮设置其标签名称为buttontext.tag_add("button",button)##改变标签print的前景颜色和背景颜色,并加下划线text.tag_config("print",background="pink",foreground="black",underline=1)##设置标签button的居中排列text.tag_config("button",justify="center")## 开始窗口的事件循环win.mainloop()
6.13 Toplevel 控件
Toplevel用于创建一个独立窗口,这个独立窗口可以不必有父控件。
| 属性 | 说明 |
|---|---|
| deiconify() | 使用iconify()或withdraw()方法后,显示这个窗口 |
| frame() | 返沪一个系统特定的窗口识别码 |
| group(window) | 将此窗口加入window窗口群组中 |
| iconify() | 将窗口缩小成小图标 |
| protocol(name,function) | 将function函数登记为callback函数 |
| state() | 返回目前窗口的状态 normal、iconic、withdrawn、icon |
| transient([master]) | 将此窗口转换为master或父窗口的暂时窗口。 当master变成小图标的时候,此窗口也会隐藏起来 |
| withdraw() | 将此窗口从屏幕上关闭,但不删除 |
| 方法 | 说明 |
|---|---|
| aspect(minNumber,minDenom,masNumber,masDenmon) | 设置窗口宽度和长度的值,比值必须在minNumber/minDenom和masNumber/masDenmon之间 |
| client(name) | 使用在x window系统中 用于定义WM_CLIENT_MACHINE属性 |
| colormapwindows(wlist……) | 使用在x window系统中 用于定义WM_COLORMAO_WINDOWS属性 |
| command(value) | 使用在x window系统中 用于定义WM_COMMAND属性 |
| focusmode(model) | 设置焦点模型 |
| geometry(geometry) | 使用widthheight+xoffset+yoffset的格式改变窗口的几何设置 |
| iconbitmap(bitmap) | 定义窗口变成小图标的时候,所使用的单色位图图标 |
| iconmask(bitmap) | 定义窗口变成小图标的时候,所使用的单色位图屏蔽 |
| iconname(newName=None) | 定义窗口变成小图标的时候,所使用的图标名称 |
| iconposition(x,y) | 定义窗口变成小图标的时候,窗口的x,y位置 |
| iconwindow(window) | 定义窗口变成小图标的时候,所使用的图标窗口 |
| maxsize(width,height) | 定义窗口的最大值 |
| minsize(width,height) | 定义窗口的最小值 |
| overrideredirect(flag) | 定义一个非零的标志 |
| position(who) | 定义位置控制器 |
| resizable(width,height) | 定义是否可以改变窗口大小的标志 |
| sizefrom(who) | 定义大小控制器 |
| title(string) | 定义窗口的标题 |
七、对话框
7.1 messagebox模块
askokcancel(title=None,message=None) 打开一个“确定/取消”的对话框
import tkinter.messageboxtkinter.messagebox.askokcancel("提示","你确定要关闭窗口吗?")

messagebox.askquestion(title=None,message=None) 打开一个“是/否”的对话框
import tkinter.messageboxtkinter.messagebox.askquestion("提示","你确定要关闭窗口吗?")

messagebox.askretrycancel(title=None,message=None) 打开一个“重试/取消”的对话框
import tkinter.messageboxtkinter.messagebox.askretrycancel("提示","你确定要关闭窗口?")

messagebox.askyesno(title=None,message=None) 打开一个“是/否”的对话框
import tkinter.messageboxtkinter.messagebox.askyesno("提示","你确定要关闭窗口吗?")

messagebox.showerror(title=None,message=None) 打开一个错误提示对话框
import tkinter.messageboxtkinter.messagebox.showerror("提示","你确定要关闭窗口吗?")

messagebox.showinfo(title=None,message=None) 打开一个信息提示对话框
import tkinter.messageboxtkinter.messagebox.showinfo("提示","你确定要关闭窗口吗?")

messagebox.showwarning(title=None,message=None) 打开一个警告提示对话框
7.2 filedialog模块
| 方法 | 说明 | | —- | —- | | Open(master=None,filetypes=None) | 打开一个“打开旧文件”的对话框
filetypes是要打开的文件类型,为一个列表 | | SaveAs(master=None,filetypes=None) | 打开一个“另存新文件”的对话框
filetypes是要打开的文件类型,为一个列表 |


from tkinter import *import tkinter.filedialog##创建主窗口win = Tk()win.title (string="打开和保存文件")##打开一个[打开旧文件]对话框def createOpenFileDialog():myDialog1.show()##打开一个[另存新文件]对话框def createSaveAsDialog():myDialog2.show()##单击按钮后,即打开对话框Button(win,text="打开文件",command=createOpenFileDialog).pack(side=LEFT)Button(win,text="另存文件",command=createSaveAsDialog).pack(side=LEFT)##设置对话框打开的文件类型myFileTypes =[('Python file',"*py *.pyw"),('ALL files','*')]##创建一个[打开旧文件]对话框myDialog1 = tkinter.filedialog.Open(win,filetypes=myFileTypes)myDialog2 = tkinter.filedialog.SaveAs(win,filetypes=myFileTypes)## 开始窗口的事件循环win.mainloop()
7.3 colorchooser模块
用于打开“颜色”对话框
| 方法 | 说明 |
|---|---|
| skcolor(color=None) | 直接打开一个“颜色”的对话框,不需要父控件与show()方法 返回值一个元素,其格式 ((R ,G ,B), “#rrggbb”) |
| Chooser(master=None) | 打开一个“颜色”的对话框 返回值是一个元组,其格式 ((R ,G ,B), “#rrggbb”) |
from tkinter import *import tkinter.colorchooser,tkinter.messagebox##创建主窗口win = Tk()win.title(string="颜色对话框")##打开一个[颜色]的对话框def openColorDialog():##显示[颜色]对话框color =colorDialog.show()##显示选择颜色的RGB值tkinter.messagebox.showinfo("提示","你选择的颜色是:" + color[1] + "\n" + "R=" + str(color[0][0]) + "G=" + str(color[[0][1]]) + " B=" + str(color[[0][2]]))##单击按钮后,即打开对话框Button(win,text="打开颜色对话框",command=openColorDialog).pack(side=LEFT)##创建一个[颜色]对话框colorDialog = tkinter.colorchooser.Chooser(win)## 开始窗口的事件循环win.mainloop()

">


