一、建立窗口
快速创建一个窗口的代码如下:
import tkinter
root=tkinter.TK() #创建一个根窗口,root是TK对象的名称(对象的名称是可以自定义的)
root.mainloop() #放在程序的最后一行,表示让根窗口进行事件循环,同时等待和处理窗口事件
1、常见的窗口属性:
title() :可以设置窗口的标题
configure(bg='color'):设置窗口的背景色
resizeable(True,True):设置是否允许用户更改窗口大小,第一个参数是宽,第二个参数是高。
minsize(width,height): 拖拽时可以设置窗口最小的宽和高。
iconbitmap("file_path.ico") :更改默认窗口图标。
geometry("widthxheight+x+y") #设置窗口宽width和高height。单位是像素,后面的x,y用于设定窗口的位置。
窗口的位置可以由微信截图信息pos,快速计算(ctrl+a)。具体操作如下:
具体代码:
2、tkinte2r 中的widget
tkinter的特性:tkinter会安排足够的控件显示控件。当我们创建好一个根窗口后,需要向根窗口中添加相应的部件,使得图形化界面更具可读性,widget可以翻译为控件或组件或部件。
具体来说:控件包括按钮、画布、文本框、标签、菜单等。
3、widget的共同属性
以下属性在widget中,作用相同。通俗来说就是只要你知道一下属性是怎么使用的,那么就
Dimensions:大小
colors:颜色
fonts:字形
Anchor:位置参考点
relief style:属性边框
bitmaps:显示位图
cursors:鼠标外形
4、widget的共同方法
进程相关的函数:
mainloop():让程序继续执行,同时进入等待与处理窗口事件。
quit(): Python shell 窗口结束,但是所建串口继续执行。
updata() :更新窗口画面。
回调函数:
bind(event,callback):事件绑定
unbind(event):解除绑定
after(time,callback):间隔指定时间调用callback()方法。
二、label标签
tkinter.Label()方法可以用于在窗口内建立文字或图像标签。基本语法如下:
tkinter.Lable(父对象,选项...)
Lable()方法的第一个参数是父对象,表示这个标签将建立在哪一个父对象(即当前标签在那个窗口对象中)。接下来将会详细介绍lable标签的属性:
label标签属性
1、text属性
标签内容,如果有‘\n’则可输入多行文字。
2、lable文字输出换行位置wraplength
wraplength这个参数可以设置标签中的文字在多少宽度后自动换行。
3、Lable的justify参数
在标签的输出中,如果是多行的输出,在最后一行的输出时可以使用justify参数设置所输出标签内容是left/center/right。(左,居中,右)
4、标签文字与标签区间的间距padx/pady
在设计标签或其他widget控件时,若不设置widget的大小,系统将使用最适合空间作为此widger的大小。也可以设置标签文字和标签区间的间距,达到更改标签区间的目的。padx可以设置标签文字左右边界与标签区间的x轴间距,pady可以设置标签文字上下边界与标签区间的y轴间距。(简而言之:就是控制标签内容与标签边界的距离)
5、分割线separator
在设计gui程序时,有时适度在适当位置添加分割线可以让整体效果视觉效果更佳。tkinter.ttk中有sepatator模块,可以用此模块完成此工作,语法格式为:
Separator(父对象,options)
Sepatator()方法的第一个参数是父对象,表示这个分割线将建立在哪一个对象内,options参数如果是HORIZONTAL则建立水平分割线,VERTICAL则建立垂直分割线。
具体实例:
from tkinter import *
from tkinter.ttk import Separator
root=Tk()
root.title("Separator learning")
label_text1="北京民办高校"
lable_text2="bcu"
lable1=Label(root,text=label_text1)
lable1.pack(padx=10,pady=10)
sep=Separator(root,orient=HORIZONTAL) #创建分割线对象
sep.pack(fill=X,padx=5)
lable2=Label(root,text=lable_text2)
lable2.pack(padx=10,pady=10)
root.mainloop()
组件的共有属性
1、组件的共有color属性:
fg设置前景色,相关于是标签的颜色;bg设置背景颜色。
2、组件的共有属性dimensions(大小/尺寸)
height可以设置widget控件的高度,单位是字符高度。width可以设置widget控件的宽度,单位是字符宽度。
3、widget的共同属性Anchor
anchor其实是指标签文字在标签区域输出位置的设置,在默认情况下,widget控件是上下与左右都居中对齐的。(tkinter中的N,S,W,E分别表示上下左右)
4、widget的共同属性Font
font参数用于设置文字字形,大小。
5、widget的共同属性Bitmaps
tkinter也提供了在标签位置放置内建位图的功能。
6、widget共有属性compound:
图像与文字共存时,可以使用此参数定义为与图形的位置关系。compound参数有:
left:图像在左
right:图像在右
top:图像在上
bottom:图像在下
7、widget的共同属性relief
relief属性可以应用在许多的widget控件上,可以利用relief属性建立widget控件的边框。
relief属性的取值为:flat,groove,raised,ridge,solid,sunken。
8、widget的共同属性photoimage
图片可以应用在许多地方,如标签、功能按钮、选项按钮、文字区域等。在使用前可以用photoimage()方法建立图像对象,然后再将此对象应用在其他窗口组件上。基本语法如下:
imageobj=PhotoImage(file="file_path") #注意图片的扩展名为gif或png
9、widget的共同方法config()
widget控件在建立时,可以直接设置对象属性,若是部分属性未建立,未来在程序执行时如果想建立或是更改属性可以使用config()方法。该方法内属性设置的参数用法与建立时相同。
from tkinter import *
counter=0
def run_counter(digit): #数字变量内容的更新def counting(): #数字变脸内容的更新global countercounter+=1digit.config(text=str(counter)) #列出数字内容digit.after(1000,counting) #没隔1秒钟,调用counting函数counting()
root=Tk()
root.title("config learning")
digit=Label(root,bg='yellow',fg='blue', #创建一个标签并且设置为指定的格式height=3,width=10)
digit.pack() #将标签添加到根窗口中
run_counter(digit)
root.mainloop()
10、widget的共同属性cursors
cursors表示光标形状,程序设计时,如果想要更改光标形状,可以使用本功能。基本使用语法为:
cursor="光标对应的形状"
11、widget的共同方法keys()
组件中有一个共同方法keys()可以用列表传回这个组件的所有参数。
三、窗口控件配置管理员
前言:在实际开发过程中,我们需要向根窗口中添加多个widget组件,接下来,我们将会继续学习如何实现将多个组件添加到根窗口中。
基本知识了解:
在设计GUI程序时,可以使用方法(pack,grid,place)包装和定位各组件在容器或窗口内的位置,这种方法称为窗口控件配置管理员。
pack方法介绍及其参数
pack是tkinter中一个类别,这是最常使用的控件配置管理方法,它是使用相对位置的概念处理widget控件配置,至于控件的正确位置则是pack方法自动完成。pack方法的自动语法格式如下。
pack(options,....)
options参数可以是side,fill,padx/pady,ipadx/ipady,anchor。
1、side参数
side参数可以垂直或水平配置控件。
side参数的取值为:
top:这是默认值,由上往下排列。
BOTTOM:由下往上排列。
left:由左往右排列。
right:由右往左排列。
2、padx/pady参数
另外,在使用pack方法时,可以使用padx/pady参数设定控件边界与容器(组件所有在窗口)的距离或是控件边界间的距离。在默认环境下窗口控件间的距离是1像素,如果希望有适度间距,可以设置参数padx/pady,代表水平间距/垂直间距。
1
from tkinter import *
window=Tk() #创建根窗口
window.title("padx pady learning")
window.geometry("180x100+879+233")
lab1=Label(window,text='原野小路',bg='lightyellow') #设置标签背景是浅黄色
lab2=Label(window,text='心存她',bg='lightgreen') #标签背景是浅绿色
lab3=Label(window,text="秀姐",bg='lightblue')
lab1.pack(side=LEFT,padx=10) #将标签添加到根窗口中
lab2.pack(side=LEFT,padx=10)
lab3.pack(side=LEFT,padx=10)
window.mainloop()
运行结果:
3、ipadx/ipady参数
ipadx参数可以控制标签文字与标签容器x轴间距,ipady参数可以控制标签文字与标签容器的y轴间距。(简单来说就是控制内容与内容所在标签边界的间距)
具体实例:
from tkinter import *
window=Tk()
window.title("ipadx ipady learning")
lab1=Label(window,text="原野小路",bg="lightgreen")
lab2=Label(window,text="心存她",bg="lightyellow")
lab3=Label(window,text="秀姐",bg="lightblue")
lab1.pack() #将组件与窗口进行绑定
lab2.pack(ipadx=50)
lab3.pack()
window.mainloop()
4、anchor参数
这个参数可以设定组件在窗口中的位置,具体指的是控件内容在控件区域的位置设定。(通俗来说:就是组件在窗口中的显示位置),anchor参数的取值可以为:NW,N,NE....具体的效果就是如下所示。
具体实例:
from tkinter import *
root=Tk()
root.title("anchor learning")
root.geometry("300x200")
name=Label(root,text="原野小路",fg='white',bg='blue')
name.pack(anchor=S,side=RIGHT,padx=10,pady=10)
mainloop()
5、fill参数、expand参数
fill参数的主要功能是告诉pack管理程序,设置控件填满所分配容器区间的方式,如果是fill=X表示控件可以填满所分配空间的x不留空白;如果fill=Y表示控件可以填满所分配空间的y轴不留白;如果fill=BOTH表示控件可以填满所分配空间的x轴和y轴。
注意事项:如果所分配容器区间已经满了,则使用fill参数将不会有任何作用。
expand参数可设定widget组件是否填满额外的父容器空间,默认是False(或0),表示不填满。如果是True(或是1)表示填满。
具体实例:
from tkinter import *
root=Tk()
root.title("fill learning")
lab1=Label(root,text="原野小路",bg="lightyellow")
lab2=Label(root,text="心存",bg='lightgreen')
lab3=Label(root,text="秀姐",bg='lightblue')
lab1.pack(side=LEFT,fill=Y)
lab2.pack(fill=X)
lab3.pack(fill=BOTH,expand=True)
root.mainloop()
#当我们拖拽改变窗口的大小时,发现标签3的填充并没有完全的进行填充,
# 这是因为当组件从左到右配置时,pack配置管理员所配置的控件是
# Y轴空间。当组件从上到小配置时,pack配置管理员所配置的控件是
# X轴的控件。“秀姐”标签在Y轴的空间称为额外空间。这时需要借助expand参数。
6、forget参数
隐藏widget控件,可以使用pack()方法复原显示。
四、功能按钮Button
功能按钮也可称为按钮,在窗口组件中可以设计单击功能按钮时,执行某一个特定的工作,这个动作称为cllback方法,也就是说可以将功能按钮当作用户与程序间沟通的桥梁。
功能按钮上可以有文字,或是和标签一样有图像。
它的语法格式如下:
Button(父对象,options)
Button()方法的第一个参数是父对象,表示这个功能按钮将建立在哪一个窗口内。
1、Button按钮汇中的options参数:
boderwidth或bd:边界宽度默认是两个像素。
bg或background:北京色彩。
command:点击功能按钮时,执行此方法
cursor:当鼠标光标制动至按钮上是的状态
fg或foreground:前景色彩。
font:字形。
height:高,单位是字符高。
highlightbackground:当功能按钮取得聚焦时的背景色。
highlightcolor:当功能按钮取得焦点时的颜色。
image:功能钮上的图像。
justify:当有多行文字时,最后一行文字的对齐方式。
padx:默认是1,可设置功能按钮与文字的间隔。
pady:默认是1,可设置功能按钮的上下间距。
text:功能按钮名称
具体实例:切换背景颜色
from tkinter import *
def yellow():"""设置窗口背景是黄色"""root.config(bg="yellow")
def blue():"""设置窗口背景是蓝色"""root.config(bg='blue')
root=Tk()
root.title("背景切换")
root.geometry("300x320+766+160")
exitbtn=Button(root,text="exit",command=root.destroy)
bluebtn=Button(root,text='blue',command=blue)
yellowbtn=Button(root,text='yellow',cursor='icon',command=yellow)
#将三个按钮包装定位到根窗口的右下角
exitbtn.pack(anchor=S,side=RIGHT,padx=5,pady=5)
bluebtn.pack(anchor=S,side=RIGHT,padx=5,pady=5)
yellowbtn.pack(anchor=S,side=RIGHT,padx=2,pady=5)
root.mainloop()
2、使用Lambda表达式
在刚刚举出的实例中,发现yellow和blue按钮执行相同的工作,但是传递的颜色参数不同,所以这是使用lambda表达式的好时机。我们可以通过lambda表达式调用相同的方法,传递不同的参数简化设计。
具体实例:
from tkinter import *
def bcolor(bgcolor):#设置窗口背景颜色root.config(bg=bgcolor)
root=Tk()
root.title("lambda learning")
root.geometry("300x200")
#依次建立三个按钮
exitbtn=Button(root,text='exit',command=root.destroy)
bluebtn=Button(root,text='blue',command=lambda:bcolor("blue"))
yellowbtn=Button(root,text='yellow',command=lambda:bcolor('yellow'))
#将三个按钮包装定位在右下方
exitbtn.pack(anchor=S,side=RIGHT,padx=5,pady=5)
bluebtn.pack(anchor=S,side=RIGHT,padx=5,pady=5)
yellowbtn.pack(anchor=S,side=RIGHT,padx=5,pady=5)
root.mainloop()
3、建立含图像的功能按钮
一般功能按钮是用文字当作按钮名称,但是也可以用图像作为按钮名称。若是使用图像当作按钮,在button()内可以省略text参数设置按钮名称,但是在button()内要增加image参数设置图像对象。
实例代码:
from tkinter import *
def msgShow():label.config(text="心存",bg='lightyellow',fg='blue')
root=Tk()
root.title("建立包含图像的功能按钮") #设置窗口标题
lable=Lable(root) #创建标签对象
img_obj=PhotoImage(file="sun.fig") #创建img对象
btn=Button(root,image=img_obj,command=msgShow) #成功创建了含有图像的按钮
lable.pack()
btn.pack()
root.mainloop()
五、文本框Entry及其相关属性
文本框是指单行的文本框,在gui程序设计中这是用于输入的最基本的组件,我们可以使用它输入单行字符串。如果输入的字符串长度大于文本框的宽度,输入的文字会自动隐藏造成部分内容无法显示。(但是可以使用箭头键移动鼠标光标到看不到的区域。)
它的使用格式为:
Entry(父对象,options,...)
Entry()方法的第一个参数是父对象,表示这个文本框将建立在哪一个窗口中。
1、使用show参数隐藏输入的字符
其实Entry控件具有可以使用show参数设置隐藏输入字符的特性,所以也常被应用于密码的输入控制。
2、Entry的get()方法
Entry有一个get()方法,可以利用这个方法获目前Entry的字符串内容。组件有一个常用方法Quit,执行此方法Python shell窗口的程序将结束,但是此窗口应用程序继续运行。