python tkinter模块

开发GUI的工具包
提供一个快速和容易的方法来创建GUI应用程序
可以方便地进行图界面设计和交互操作编程
优点:简单易用
      与Python结合度好
缺点:缺少合适的可视化界面设计工具
      需要通过代码完成窗口设计和元素布局
Python标准安装程序中自带Tkinter模块
常用方法:minloop()主事件循环执行
执行步骤:导入tkinter模块
           from tkinter import
          或 import tkinter
           创建GUI应用程序的主窗口
            tk = Tkinter.Tk()
           添加各种组件
           进入主事件循环的由用户触发每个时间相应


Canvas      画布        提供绘图功能,可以包含图形或位置,实际定制窗口组件
Button      按钮        具有鼠标掠过,按下,释放及键盘操作事件
Label       标签        显示文字或图片
Entry       文本框      单行文字域,收集键盘输入
Text        文本域      多行文字区域,收集或显示用户输入的文字
CheckButton 多选框      一组方框,可以选择多项
Radiobutton 单选框      一组按钮,只可选择一项
Menu        菜单        点击菜单弹出一个选项列表供用户选择
Menubutton  菜单按钮    包含下拉式,层叠式组件
Listox      列表框      一个选项列表,用户可从中选择
Scale       进度条      可设定起始值和结束值,能显示当前位置的精准值
Scrollbar   滚动条      对其支持的组件(画布,文本框,文本域,列表框)提供滚动功能
Frame       框架        包含其他组件的纯容器
Toplevel    顶级容器    类似框架,但提供一个独立的窗口容器


每个组件都有自己的属性和方法
共用的属性:Dimensions: 各种长度,宽度
            Color: 颜色
            Fonts: 字体
            Anchors: 定义文本的相对位置
            Relief shyles: 组件的样式
            Bitmaps: 位图
            Cursors: 光标
布局管理器
     pack(): 将组件包装到一个父组件中,创建一个版面
     grid(): 通过二维网络组织窗口组件创建一个类似表的版面
     place(): 显示将一个窗口组件放到指定的位置


创建画布:canvas = Canvas(master,options=value,....)
          参数master: 代表父窗口
          options: 设置画布的属性
Canvas 组件
常用属性
bd        边框宽度,以像素为单位,默认为2
bg        背景颜色
confine   默认值中光标形状,arrow,circle,dot
height    高度
width     宽度
常用方法
create_arc()       创建弧线,可以是一个和弦,饼图扇区,或一个简单的弧
create_image()     创建一个图像,可以是位图图像,或照片图像类的一个实例
create_line()      创建一条直线
create_oval()      在给定的坐标绘制一个圆或椭圆
create_polygon()   绘制一个多边形,至少有三个顶点
create_rectangle() 绘制一个矩形


from tkinter import *
import time
# 在画布上绘制正方形
tk = Tk()
canvas = Canvas(tk,width=400,height=400)
canvas.pack()
canvas.create_rectangle(10,10,50,50)
tk.mainloop()


# 在画布上绘制背景为橙色的长方形
tk = Tk()
canvas = Canvas(tk,width=400,height=400)
canvas.pack()
p1 = 10,50
p2 = 300,100
canvas.create_rectangle(p1,p2,fill="orange")
tk.mainloop()


# 在画布上绘制三角形
tk = Tk()
canvas = Canvas(tk,width=400,height=400)
canvas.pack()
p1 = 10,50
p2 = 100,50
p3 = 10,100
canvas.create_polygon(p1,p2,p3,fill="yellow",outline="black")
tk.mainloop()


# 在画布上绘制多边形
tk = Tk()
canvas = Canvas(tk,width=400,height=400)
canvas.pack()
p1 = 200,110
p2 = 240,130
p3 = 120,200
p4 = 140,220
canvas.create_polygon(p1,p2,p3,p4,fill="green",outline="blue")
tk.mainloop()


# 在画布上显示文字
tk = Tk()
canvas = Canvas(tk,width=400,height=400)
canvas.pack()
canvas.create_text(100.10,text="你好吗?",font=("宋体"))
tk.mainloop()


# 在画布上绘制各种形状的图形
tk = Tk()
canvas = Canvas(tk,width=400,height=500,bg="grey",bd=0)
canvas.pack()
coord1 = 10,10,200,80
coord2 = 10,80,200,160
coord3 = 10,160,200,240
coord4 = 10,240,200,320
coord5 = 10,320,200,400
canvas.create_arc(coord1,start=0,extent=45,style=ARC)
canvas.create_arc(coord2,start=0,extent=90,style=ARC)
canvas.create_arc(coord3,start=0,extent=180,style=ARC)
canvas.create_arc(coord4,start=0,extent=350,style=ARC)
canvas.create_arc(coord5,start=0,extent=150,fill="blue")
tk.mainloop()


#水平方向移动三角形
tk = Tk()
canvas = Canvas(tk,width=400,height=400)
canvas.pack()
point1 = 10,10
point2 = 10,60
point3 = 50,35
canvas.create_polygon(point1,point2,point3)
for i in range(0,60):
    canvas.move(1,5,0)
    tk.update()
    time.sleep()

tk.mainloop()



事件(Event)
是对象对外部动作的响应
如:手机铃声响了,有人敲门了
计算机软件范畴中,事件由系统事件设定的,能被对象设别和响应的动作
事件是GUI应用程序的组成部分
如:用户敲击键盘上的某个键,或点击移动鼠标


事件驱动
事件是对象发送的消息,发信息通知操作的发生
引发事件的对象称为事件发送方
捕获事件并作出响应的对象叫做事件接收方
事件发生后,需要对其作出反应和处理
事件处理方会根据事件信息对事件进行处理
例如:在用户敲击键盘上的某个键,或点击移动鼠标后系统会执行相应的操作,打开窗口,保存文件等等
所有GUI应用程序都是事件驱动


事件处理
事件是GUI程序的组成部分
GUI程序中,每个组成都是一个对象
组件的组成
    属性:容纳程序里要用到的数据
    方法:执行的操作
    事件:一种信息通知
不同的徐建对象具有不同的事件
例如:用户敲击键盘上的某个键,或点击移动鼠标
当事件发生时,会调用某个对应的方法处理该事件


绑定
为程序建立一个处理某个事件的事件处理方法
级别
    实例绑定:将事件与一个特定组件实例绑定
    组件实例,bind(事件描述符,事件处理方法)


    类绑定:将事件与一个组件类绑定 
    组件实例,bind_class(组件类,事件描述符,事件处理方法)


    程序界面绑定:当界面上任何组件实例触发某个事件,程序都作出相应的处理
    widget.bind_all(事件描述符,事件处理方法)
    
    如:按下鼠标左键与Canvas对象绑定画一条线
    canvas.bind("<Button-1>",drawline)


    如;绑定按钮类,所有按钮对象可处理鼠标左键操作事件
    widget.bind_class("Canvas","<Button-1>",drawline)


    如:将PrintScreen键与程序所有组件对象绑定
    widget.bind_all("<Key-Print>",printScreen)


事件队列与事件类型
事件队列:包含一个或多个事件类型的字符串
每个事件类型指定了一项事件
当有多项事件类型包含于事件队列中,当且仅当描述符中全部事件发生时才能调用处理方法
事件类型的通用处理格式
    <[modifier]...type[-detail]>
    事件类型必须放置于尖括号“<>”内
    modifier用于组合键定义,如Control,Alt
    type描述了通用类型
    detail用于明确定以是哪一个键或按钮的事件
    <KeyPreess-A>表示按下键盘A键
    <Buttin-1>表示按下鼠标左键


键盘事件
事件名称
KeyPress      按下键盘某键时触发,可以在detail部分指定是哪个键
KeyRelease    释放键盘某键时触发,可以在detail部分指定是那个键
鼠标事件
ButtonPress   按下鼠标某键,可以在detail部分指定是哪个键
ButtonRelease 释放鼠标某键,可以在detail部分指定的那个键
Motion        点中组件的同时拖拽组件移动时触发
Enter         当鼠标指针移进某组件触发
Leave         当鼠标指针移出某组件触发
MouseWheel    当鼠标滚轮滚动式触发


窗体事件
Visibility    当组件变为可视态时触发
Unmap         当组件由显示状态变为隐藏状态时触发
Map           当组件由隐藏状态变为显示状态时触发
Expose        当组件从原本被其他组件遮盖的状态中暴露出来时触发
FocusIn       组件获得焦点时触发
FocusOut      组件失去焦点时触发
Activate      与组件选项中state项有关,表示组件由不可用转为可用
Deactivate    与组件选项中state项有关,表示组件由可用转为不可用


事件前缀
Alt           按下Alt键时
Any           按下如何按键时
Control       按下Control键时
Double        两个事件在短时间内发生时
Lock          按下Caps lock 键时
Shift         按下Shift键时
Triple        类似于Double,三个事件在短时间内发生

事件(Event)
是对象对外部动作的响应
如:手机铃声响了,有人敲门了
计算机软件范畴中,事件由系统事件设定的,能被对象设别和响应的动作
事件是GUI应用程序的组成部分
如:用户敲击键盘上的某个键,或点击移动鼠标


事件驱动
事件是对象发送的消息,发信息通知操作的发生
引发事件的对象称为事件发送方
捕获事件并作出响应的对象叫做事件接收方
事件发生后,需要对其作出反应和处理
事件处理方会根据事件信息对事件进行处理
例如:在用户敲击键盘上的某个键,或点击移动鼠标后系统会执行相应的操作,打开窗口,保存文件等等
所有GUI应用程序都是事件驱动


事件处理
事件是GUI程序的组成部分
GUI程序中,每个组成都是一个对象
组件的组成
    属性:容纳程序里要用到的数据
    方法:执行的操作
    事件:一种信息通知
不同的徐建对象具有不同的事件
例如:用户敲击键盘上的某个键,或点击移动鼠标
当事件发生时,会调用某个对应的方法处理该事件


绑定
为程序建立一个处理某个事件的事件处理方法
级别
    实例绑定:将事件与一个特定组件实例绑定
    组件实例,bind(事件描述符,事件处理方法)


    类绑定:将事件与一个组件类绑定 
    组件实例,bind_class(组件类,事件描述符,事件处理方法)


    程序界面绑定:当界面上任何组件实例触发某个事件,程序都作出相应的处理
    widget.bind_all(事件描述符,事件处理方法)
    
    如:按下鼠标左键与Canvas对象绑定画一条线
    canvas.bind("<Button-1>",drawline)


    如;绑定按钮类,所有按钮对象可处理鼠标左键操作事件
    widget.bind_class("Canvas","<Button-1>",drawline)


    如:将PrintScreen键与程序所有组件对象绑定
    widget.bind_all("<Key-Print>",printScreen)


事件队列与事件类型
事件队列:包含一个或多个事件类型的字符串
每个事件类型指定了一项事件
当有多项事件类型包含于事件队列中,当且仅当描述符中全部事件发生时才能调用处理方法
事件类型的通用处理格式
    <[modifier]...type[-detail]>
    事件类型必须放置于尖括号“<>”内
    modifier用于组合键定义,如Control,Alt
    type描述了通用类型
    detail用于明确定以是哪一个键或按钮的事件
    <KeyPreess-A>表示按下键盘A键
    <Buttin-1>表示按下鼠标左键


键盘事件
事件名称
KeyPress      按下键盘某键时触发,可以在detail部分指定是哪个键
KeyRelease    释放键盘某键时触发,可以在detail部分指定是那个键
鼠标事件
ButtonPress   按下鼠标某键,可以在detail部分指定是哪个键
ButtonRelease 释放鼠标某键,可以在detail部分指定的那个键
Motion        点中组件的同时拖拽组件移动时触发
Enter         当鼠标指针移进某组件触发
Leave         当鼠标指针移出某组件触发
MouseWheel    当鼠标滚轮滚动式触发


窗体事件
Visibility    当组件变为可视态时触发
Unmap         当组件由显示状态变为隐藏状态时触发
Map           当组件由隐藏状态变为显示状态时触发
Expose        当组件从原本被其他组件遮盖的状态中暴露出来时触发
FocusIn       组件获得焦点时触发
FocusOut      组件失去焦点时触发
Activate      与组件选项中state项有关,表示组件由不可用转为可用
Deactivate    与组件选项中state项有关,表示组件由可用转为不可用


事件前缀
Alt           按下Alt键时
Any           按下如何按键时
Control       按下Control键时
Double        两个事件在短时间内发生时
Lock          按下Caps lock 键时
Shift         按下Shift键时
Triple        类似于Double,三个事件在短时间内发生

#水平方向移动三角形
tk = Tk()
canvas = Canvas(tk,width=400,height=400)
canvas.pack()
point1 = 10,10
point2 = 10,60
point3 = 50,35
canvas.create_polygon(point1,point2,point3)
for i in range(0,60):
    canvas.move(1,5,0)
    tk.update()
    time.sleep(0.02)
tk.mainloop()'''


# 按下键盘的return键水平移动三角形
tk = Tk()
canvas = Canvas(tk,width=400,height=400)
canvas.pack()
canvas.create_polygon(10,10,10,60,50,35)
def movetriangle(event):
    canvas.move(1,5,0)
canvas.bind_all("<KeyPress-Return>",movetriangle)
tk.mainloop()


# 使用键盘的上下左右键移动三角形
tk = Tk()
canvas = Canvas(tk,width=400,height=400)
canvas.pack()
id1 = canvas.create_polygon(10,10,10,60,50,35)
def movetriangle(event):
    if event.keysym == "Up":
        canvas.move(id1,0,-3)
    elif event.keysym == "Down":
        canvas.move(id1,0,3)
    elif event.keysym == "Left":
        canvas.move(id1,-3,0)
    else:
        canvas.move(id1,3,0)
canvas.bind_all("<KeyPress-Up>",movetriangle)
canvas.bind_all("<KeyPress-Down>",movetriangle)
canvas.bind_all("<KeyPress-Left>",movetriangle)
canvas.bind_all("<KeyPress-Right>",movetriangle)
tk.mainloop()

Python Tkinter模块提供了一个用户友好的图形用户界面(GUI)框架,可以用于创建简单的GUI应用程序,这些应用程序可以跨平台运行,所以TkinterPython GUI编程的一种流行的选择。TkinterPython的标准GUI库,它包含了很多常见的基本控件,如标签、按钮、文本框、滑块、菜单、复选框、单选钮等,同时Tkinter也支持画布、弹出窗口、消息框等。 Python Tkinter模块具有很多好处。首先,它易于学习和编写。它的语法简单明了,清晰易懂,甚至对于没有任何编程经验的人也很容易理解。其次,有很多教程和文档可供参考,许多初学者和专业开发人员都能从中受益。第三,它是免费的,可以在大多数操作系统上自由使用。 Tkinter的一个非常重要的特性是它的跨平台性。无论是在Windows、Mac还是Linux,Tkinter都能够很好地运行。这大大简化了Python GUI应用程序开发的过程,因为开发人员不必担心在不同平台上的兼容性问题。 Tkinter还非常灵活,它支持很多定制化选项。开发人员可以定制控件的颜色、字体、大小、位置、样式等,以实现自己的需求。此外,Tkinter还支持GUI应用程序的国际化和本地化,使得应用程序可以在不同的语言环境中运行。 总之,Python Tkinter模块是一个灵活、易学、易用的GUI框架,适用于初学者和专业开发人员。使用Tkinter,你可以轻松创建GUI应用程序,并且其跨平台能力使得其使用范围非常广泛。随着Python的不断发展,预计Tkinter也将持续改进和升级,成为更加强大和灵活的GUI框架。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值