tkinter学习笔记

一、建立窗口

快速创建一个窗口的代码如下:

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 counter
        counter+=1
        digit.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窗口的程序将结束,但是此窗口应用程序继续运行。

  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值