首页 > python学习 > python中tkinter模块
2020
07-13

python中tkinter模块

Tkinter是Python的标准GUI库,该模块内置在python的安装包中、只要安装好Python之后就能使用,Python3.x版本开始该模块使用首写字母T为小写的库名tkinter。

1、使用import tkinter或者from tkinter import *导入模块;
2、使用tkinter.Tk()创建一个根窗口(顶层窗口、root窗口),用于容纳后面创建的组件;
3、使用tkinter.Frame()创建框架组件或者使用tkinter.Toplevel()创建子窗口;
4、使用pack()、grid()或place()方法把框架组件或者子窗口放置到指定窗口的指定位置;
5、创建并设置各种组件的属性;
6、通过组件的pack()、grid()或place()方法把组件放置到指定窗口的指定位置;
    Menu组件通过root.config(menu=MenuBar)方法显示
7、重复第3、4、5、6步骤直到所有的组件全部创建并放如到指定窗口中;
8、使用根窗口的mainloop()方法进入主事件循环。

根窗口的属性设置:

root.title('窗口的标题'):设置窗口标题,也可在创建时使用className参数来设置
root.resizable(0,0):框体大小可调性,分别表示x,y方向的可变性,只要不为0就表示可变,具体的数值大小没有实际意义
root.geometry('250x150'):指定初始化的窗口大小(长x宽)
root.geometry('+x+y'):打开窗口默认的窗口位置(相对于显示器左上角)
root.iconbitmap('**.ico'):设置窗口图标
root.quit():退出
root.update_idletasks()
root.withdraw():窗口隐藏
root.deiconify():窗口显示
root.update()刷新页面
root.maxsize():获取当前环境的最大窗口大小(返回宽高组成的元祖)
root.winfo_x():获取当前窗口左上角相对于显示器左上角的横坐标
root.winfo_x():获取当前窗口左上角相对于显示器左上角的纵坐标
root.winfo_screenwidth():获取当前环境的最大窗口宽
root.winfo_screenheight():获取当前环境的最大窗口高

tkinter中的组件

Button	按钮组件;在程序中显示按钮。
Canvas	画布组件;显示图形元素如线条或文本
Checkbutton	复选组件;用于在程序中提供多项选择框
Entry	输入组件;用于显示简单的文本内容
Frame	框架组件;在屏幕上显示一个矩形区域,多用来作为容器,将几个组件组成一组
Label	标签组件;可以显示文本和位图
Listbox	列表框组件;在Listbox窗口小部件是用来显示一个字符串列表给用户
Menubutton	菜单按钮组件,由于显示菜单项,它的功能完全可以使用Menu替代
Menu	菜单组件;显示菜单栏,下拉菜单和弹出菜单
Message	消息组件;与label比较类似,但是可以根据自身大小将文本换行;
Radiobutton	单选按钮组件;显示一个单选的按钮状态
Scale	范围组件;显示一个数值刻度,为输出限定范围的数字区间,滑块,允许通过滑块来设置一数字值
Scrollbar	滚动条组件,当内容超过可视化区域时使用,配合使用canvas, entry, listbox, and text窗口部件的标准滚动条。
Text	文本组件;用于显示多行文本
Toplevel	容器组件;用来提供一个单独的对话框,和Frame比较类似,用来创建子窗口窗口组件
Spinbox	输入组件;与Entry类似,但是可以指定输入范围值

所有组件都有一个位置参数master,该值默认为None,表示该组件将要放置到的窗口或框架名称,如果创建组件时不指定还可以在步骤6中放置组件时指定,其他的控制参数都是以关键字参数的形式传入。

tkinter中的可变变量

由于python中的字符串、整数、浮点数以及布尔值都是不可变的,所以tkinter自带了一些类型,可以就地更新,并可以在其值发生改变时通知相关的插件

IntVar:可变的int变量
StringVar:可变的str变量
BooleanVar:可变的布尔变量
DoubleVar:可变的double变量
且可变类型的值是通过set和get方法来设置和获得的。

组件的常用参数

几乎所有组件都有的参数,实际使用中可能有个别组件不存在某个属性。除了在实例化的时候传入参数设置某个属性外,还可以使用类似于字典的操作直接为某个属性设置值(组件实例对象["属性名"] = 值)

dimension:组件大小
width:组件宽度
height:组件高度
color:组件颜色
background(bg):背景色
borderwidth(bd):边框的宽度,默认值有系统指定,一般为1或2像素
foreground(fg):前景色(组件文本或位图的颜色)
disabledforeground:禁用前景色
font:组件的字体,('Times',10,'bold','italic')依次表示字体、字号、加粗、倾斜 
anchor:组件中文本或图像的位置,可能的值有n,ne,e,se,s,sw,w,nw或者center(默认值),n表示上,e表示右,s表示下,w表示左(上北下南左西右东)
justify:组件中多行文本的对齐方式,可能的值有tkinter.LEFT/RIGHT/CENTER(默认值)
relief:组件边框的3D效果样式,可能的值groove, raised, ridge, solid, sunken或者flat(默认值)
takefocus:组件是否接受焦点,值为布尔值,默认False

image:组件上显示的图片(仅支持gif、pgm、ppm格式),使用PhotoImage组件实例对象赋值
    photo=tkinter.PhotoImage(file='11.png')
    one_label=tkinter.Label(root,text='测试文字',image=photo,compound=tkinter.CENTER)
bitmap:组件上显示的位图(仅支持xbm格式),如果设置了image则忽略该选项,使用BitmapImage组件实例对象赋值,和image的赋值类似。
compound:同时设置了组件的文本和图像时的混合模式,默认值(None)会显示图片忽略文字,为tkinter.CENTER时文本显示在图片上,为tkinter.TOP/RIGHT/BOTTOM/LEFT表示图片在文字的旁边(上边,右边,左边或下边)
cursor:指定鼠标移动到组件上的指针样式
padx:组件水平方向上的内间距,默认为1
padx:组件垂直方向上的内间距,默认为1
text:指定按钮上显示的文本,文本可以包含换行符'\n'
textvariable:显示tkinter变量,一般与StringVar变量配合着用,用于显示可变文本
    change_text=tkinter.StringVar()
    change_text.set('这是显示的可变文本内容')
    one_label=tkinter.Label(root,textvariable=change_text)
show:文本框显示的字符,一般为Entry组件使用,不管输入什么值,显示的都是该值的第一个字符,一般设置为*用来表示输入密码;
state:设置组件的状态,可能的值有active, disabled或normal(默认值),readonly
default:设置组件的初始状态,可能的值active,normal或者disabled(默认值)
command:指定组件状态改变时的调用函数,默认是不传入任何参数的
    def func1(*args,**kwargs): print(*args,**kwargs)
    def fun2(): func2('option')
    btn=Button(root,text="demo",command=fun1)
    btn.pack()
    #打印为空,所以没有传递任何参数
    btn=Button(root,text="demo",command=fun2)
    btn.pack()
    #通过一个函数运行另一个函数,达到传一个固定的参数的目的
    btn=Button(root,text="demo",command=lambda:fun1('option'))
    btn.pack()
    #通过lambda语句动态传入参数
activeforeground,activebackground:组件处于活动(通过state设置)时的前景色和背景色,Button组件表示按钮按下状态
disabledforeground,disabledbackground:组件不可用是的前景色和背景色
highlightbackground:组件没有获得焦点时的高亮边框颜色,默认值有系统指定,通常为标准的背景颜色
highlightcolor:组件获得焦点时的高亮边框颜色
highlightthickness:组件高亮边框的宽度,默认值是0(表示不显示高亮边框)
wraplength:指定文本每行的长度,每行多长换行显示,默认值为0
underline:配合text使用,指定text的文本字符划下划线,如值设置为2则表示第3个字符画上下划线,默认为-1
repeatdelay:重复延迟
repeatinterval:重复间隔
selectbackground:选定文本背景色
selectforeground:选定文本前景色
selectborderwidth:选择边框宽度

组件的常见方法:

configure(option=value)组件在实例化之后可以通过该函数修改某个参数的值,如通过configure(text=value)修改显示的文本
deselect()清除组件的状态
flash()在active和normal状态间切换若干次,但最终保持它开始时的状态
invoke()调用此方法来获得与单击更改其状态时发生的操作,通常是运行command指定的函数并返回函数的返回值
select()设置按钮为选中状态
toggle()选中与没有选中互相切换

Entry和Text输入组件的方法:

get()返回当前组件的显示字符串
icursor(index)在给定索引处的字符之前插入光标
index(index)移动entry的内容,使得给定索引处的字符是最左边的可见字符。如果文本在entry中刚好完全显示,则不起作用。
insert(index, s)将字符串s插入给定索引处的字符之前。
    Text组件:
    get(start_index,end_index)
    insert(index,val)

    'line.column':使用(行.列)的形式执行行和列(从0开始)
    'line.end':某一行的末尾
    'insert'(或tkinter.INSERT):当前光标的位置
    'current'(或tkinter.CURRENT):与鼠标当前坐标最接近的位置,如果此时紧按鼠标任何一个按钮,会直接到你松开才相应。
    'end'(或tkinter.END):对应Text组件的文本缓冲区最后一个字符的下一个位置
select_adjust(index)此方法用于确保选中的部分包含指定索引处的字符。
select_clear()清除选中的内容,如果当前没有选中的,则不起作用。
select_from(index)将ANCHOR索引位置设置为由索引选择的字符位置,并选择该字符。
select_present()如果有选择,则返回true,否则返回false。
select_range(start,end)在程序控制下设置选择。 选择从开始索引处开始的文本,但不包括结束索引处的字符。 起始位置必须在结束位置之前。
select_to(index)选择从ANCHOR位置开始的所有文本,但不包括给定索引处的字符。
xview(index 此方法在将Entry链接到水平滚动条时非常有用。
xview_scroll(number,what)用于水平滚动Entry。 参数必须是UNITS,按字符宽度滚动,或者按页面大小来滚动。 数字是从左到右滚动的正数,负数从右到左滚动。

单选框Radiobutton和复选框Checkbutton参数

selectcolor,selectimage:单选或复选框(文本前面的小圆圈或小方框)的背景颜色或图片
value:指定组件被选中中关联变量的值
variable:指定组件所关联的变量
indicatoron:特殊控制参数,当为0时,组件会被绘制成按钮形式
offvalue, onvalue:设置复选框组件选中和非选中的状态值(默认值为1或0)

单选框Radiobutton组件有组的概念,同一组内只能有一个按钮被选中,每当选中组内的一个按钮时,其它的按钮自动改为非选中态,绑定相同的变量的单选组件为同一组

var = IntVar()
R1 = Radiobutton(root, text="Option 1", variable=var, value=1)
R1.pack()
R2 = Radiobutton(root, text="Option 2",variable=var,value=2)
R2.pack()
R3 = Radiobutton(root, text="Option 3", variable=var, value=3)
R3.pack()

绘图Canvas的方法主要以下几种:

    create_arc(x1,y1,x2,y2):直角+圆弧;
    create_bitmap      绘制位图,支持XBM;
    create_image       绘制图片,支持GIF(x,y,image,anchor);
    create_line(x1,y1,x2,y2)         绘制直线;
    create_oval(x1,y1,x2,y2)        绘制椭圆;
    create_polygon(x1,y1,...,xn,yn)     绘制多边形(坐标依次罗列,不用加括号,还有参数,fill,outline);
    create_rectangle(x1,y1,x2,y2)   绘制矩形((a,b,c,d),值为左上角和右下角的坐标);
    create_text         绘制文字(字体参数font,);
    create_window      绘制窗口;
    只要用create_*方法画了一个图形,就会自动返回一个id,将它赋值给一个变量,需要时就可以使用这个变量名
    delete              删除绘制的图形;
    itemconfig(id,**config)          修改图形属性,第一个参数为图形的ID,后边为想修改的参数;
    move(id,x,y):移动图像,然后用root.update()刷新即可看到图像的移动
    coords(uid):返回对象的位置的两个坐标(4个数字元组)
最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。