tkinter简明教程

对于一个简单的GUI程序设计来说,我觉得无非就是三个要素,widget(部件),layout(布局),event(事件的响应)
GUI就和搭积木差不多,widget就好比是各种形状的积木,比如长方形,正方形,三角形等等。layout就是如何将这些积木搭建成为一个小房子,小木屋。

widget(组件)

名称作用示意图
Tk整体框架
Button按钮控件;在程序中显示按钮。
Checkbutton多选框控件;用于在程序中提供多项选择框在这里插入图片描述
Canvas画布控件;显示图形元素如线条或文本在这里插入图片描述
Label标签控件;可以显示文本和位图在这里插入图片描述
Entry输入控件;用于显示简单的文本内容在这里插入图片描述
Listbox列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户在这里插入图片描述
menu菜单控件;显示菜单栏,下拉菜单和弹出菜单在这里插入图片描述
Menubutton菜单按钮控件,用于显示菜单项。在这里插入图片描述
Progressbar进度条在这里插入图片描述
Message消息控件;用来显示多行文本,与label比较类似在这里插入图片描述
PanedWindow窗口布局管理的插件,可以包含一个或者多个子控件在这里插入图片描述
Radiobutton单选按钮控件;显示一个单选的按钮状态在这里插入图片描述
Scale范围控件;显示一个数值刻度,为输出限定范围的数字区间在这里插入图片描述
Scrollbar滚动条控件,当内容超过可视化区域时使用,如列表框。在这里插入图片描述
Text文本控件;用于显示多行文本在这里插入图片描述
Combobox下拉列表在这里插入图片描述
Notebook提供一个区域,用户可以通过单击该区域顶部的选项卡来选择内容页面在这里插入图片描述
Treeview树状图在这里插入图片描述
Treeview表格在这里插入图片描述

Treeview

import tkinter
from tkinter import ttk
 
 
win = tkinter.Tk()
win.title("Kahn Software v1")    # #窗口标题
win.geometry("600x500+200+20")   # #窗口位置500后面是字母x
'''
表格
'''
tree = ttk.Treeview(win)      # #创建表格对象
tree["columns"] = ("姓名", "年龄", "身高", "体重")     # #定义列
tree.column("姓名", width=100)          # #设置列
tree.column("年龄", width=100)
tree.column("身高", width=100)
tree.column("体重", width=100)
tree.heading("姓名", text="x姓名")        # #设置显示的表头名
tree.heading("年龄", text="x年龄")
tree.heading("身高", text="x身高")
tree.heading("体重", text="x体重")
tree.insert("", 0, text="line1", values=("卡恩", "18", "180", "65"))    # #给第0行添加数据,索引值可重复
tree.insert("", 1, text="line2", values=("范冰冰", "38", "170", "55"))
tree.insert("", 2, text="line3", values=("戚薇", "28", "169", "50"))
tree.insert("", 3, text="line4", values=("杨霞", "30", "172", "63"))
tree.insert("", 4, text="line5", values=("李小冉", "31", "175", "65"))
tree.insert("", 5, text="line6", values=("迪丽热巴", "29", "175", "61"))
 
tree.pack()
win.mainloop()   # #窗口持久化

Event(事件)

一个 Tkinter 应用程序大部分时间是花在事件循环当中的,也就是通过 mainloop() 进入的事件循环。

事件可以有各种来源:用户触发的鼠标和键盘操作和窗口管理器触发的重绘事件(在多数情况下是由用户简介引起的)

Tkinter 给我们提供了一个强大的机制去管理这些事件,去定义这些事件的操作。对每一个组件来说,可以通过 bind() 的方法来将自己定义的函数或方法绑定到具体的事件上。

widget.bind(event, handler)

当被触发的事件满足该组件绑定的事件的时候,Tkinter 就会带着事件对象(Event、事件本身的描述)去调用自定义的 handler() 方法。

常见事件类型

常用事件类型如下:

【鼠标单击事件】

'<Button-1>'#单击鼠标左键
'<Button-2>'#单击鼠标滚轮
'<Button-3>'#单击鼠标右键
'<Button-4>'#向上滚动滑轮
'<Button-5>'#向下滚动滑轮

【鼠标双击事件】

'<Double-Button-1>'#鼠标左键双击
'<Double-Button-2>'#鼠标中键双击
'<Double-Button-3>'#鼠标右键双击

【鼠标释放事件】

'<ButtonRelease-1>'#鼠标左键释放
'<ButtonRelease-2>'#鼠标中键释放
'<ButtonRelease-3>'#鼠标右键释放

【鼠标拖动事件】

'<B1-Motion>'#左键拖动
'<B2-Motion>'#中键拖动
'<B3-Motion>'#右键拖动

【鼠标其他操作】

'<Enter>'#鼠标进入控件(放到控件上面)
'<FocusIn>'#控件获得焦点
'<Leave>'#鼠标移出控件
'<FocusOut>'#控件失去焦点

【键盘按下事件】

'<KeyPress>'#键盘按下,通常格式类似<KeyPress-A>,<KeyPress-a>区分大小写
'<KeyRelease>'#键盘弹起,通常格式类似<KeyRelease-A>,<KeyRelease-a>区分大小写

一些功能键详见下方Key names

【控件属性改变事件】

'<Configure>'#控件大小改变,新的控件大小会存储在事件event对象中的 width 和 height 属性传递,部分平台上该事件也代表控件位置改变。

【组合使用】

'<Control-Shift-Alt-KeyPress-A>'#同时按下Ctrl+Shift+Alt+A等4个键

Event对象

当Tkinter去回调你定义的函数的时候,就会带着Event对象(作为参数)去调用,Event对象以下这些属性你可以使用:

属性名说明
widget产生该事件的组件
x, y当前的鼠标的位置坐标(相对于窗口左上角,单位为像素)
x_root, y_root当前的鼠标的位置坐标(相对于屏幕左上角,单位为像素)
char按键对应的字符(键盘事件专属,不会显示Control,Shift等键)
keysym按键名,见下方Key names(键盘事件专属)
keycode按键码,见下方Key names(键盘事件专属)
num按钮数字(鼠标事件专属)
width, height组件的新尺寸(Configure事件专属)
type该事件类型

Key names

按键名(keysym)   按键码(keycode)       代表的按键
Alt_L                64                左边的Alt按键
Alt_R                113               右边的Alt按键
BackSpace            22                BackSpace(退格)按键
Cancel               110               break按键
Caps_Lock            66                CapsLock(大写字母锁定)按键
Control_L            37                左边的Control
Control_R            109               右边的Control
Delete               107               Delete按键
Down                 104               ↓按键
End                  103               End按键
Escape               9                 Esc按键
Execute              111               SysReq按键
F1                   67                F1按键
F2                   68                F2按键
F3                   69                F3按键
F4                   70                F4按键
F5                   71                F5按键
F6                   72                F6按键
F7                   73                F7按键
F8                   74                F8按键
F9                   75                F9按键
F10                  76                F10按键
F11                  77                F11按键
F12                  96                F12按键
Home                 97                Home按键
Insert               106               Insert按键
Left                 100               ←按键
Linefeed             54                Linefeed(Ctrl + J)
KP_0                 72                小键盘数字0
KP_1                 73                小键盘数字1
KP_2                 74                小键盘数字2
KP_3                 75                小键盘数字3
KP_4                 76                小键盘数字4
KP_5                 77                小键盘数字5
KP_6                 78                小键盘数字6
KP_7                 79                小键盘数字7
KP_8                 80                小键盘数字8
KP_9                 81                小键盘数字9
KP_Add               86                小键盘的+按键
KP_Begin             84                小键盘的中间按键(5)
KP_Decimal           91                小键盘的点按键(.)
KP_Delete            91                小键盘的删除键
KP_Divide            112               小键盘的/按键
KP_Down              88                小键盘的↓按键
KP_End               87                小键盘的End按键
KP_Enter             108               小键盘的Enter按键
KP_Home              79                小键盘的Home按键
KP_Insert            90                小键盘的Insert按键
KP_Left              83                小键盘的←按键
KP_Mutiply           63                小键盘的*按键
KP_Next              89                小键盘的PageDown按键
KP_Prior             81                小键盘的PageUp按键
KP_Right             85                小键盘的→按键
KP_Subtract          82                小键盘的-按键
KP_Up                80                小键盘的↑按键
Next                 105               PageDown按键
Num_Lock             77                NumLock(数字锁定)按键
Pause                110               Pause(暂停)按键
Print                111               PrintScrn(打印屏幕)按键
Prior                99                PageUp按键
Return               36                Enter(回车)按键
Right                102               →按键
Scroll_Lock          78                ScrollLock按键
Shift_L              50                左边的Shift按键
Shift_R              62                右边的Shift按键 
Tab                  23                Tab(制表)按键
Up                   98                ↑按键

有些没有在上表的键名可以使用如下代码测试键名和键码:

import tkinter
from tkinter import ttk
 
 
def xFunc1(event):
    print(f"事件触发键盘输入:{event.char},对应的ASCII码:{event.keycode}")
 
 
win = tkinter.Tk()
win.title("Kahn Software v1")    # #窗口标题
win.geometry("600x500+200+20")   # #窗口位置500后面是字母x
'''
响应所有事件(键盘)
<Key>   所有键盘按键会触发
'''
xLabel = tkinter.Label(win, text="KAHN Hello world")
xLabel.focus_set()
xLabel.pack()
xLabel.bind("<Key>", xFunc1)
 
win.mainloop()   # #窗口持久化

layout(布局)

这部分将介绍tkinter中的几种布局方式:Grid,Place,pack

Place

place的调用方式为

place(**options)

options

anchor= # 相对窗口位置
#默认值是 NW.
bordermode= # 边框模式
#默认值是 INSIDE.
height= # 高度
#无默认值.
in= # 控制在某个控件内,in是python中的关键字,通常使用 in_ 代替
#默认值是 ..
relheight= # 相对高度
#无默认值.
relwidth= # 相对宽度
#无默认值.
relx= # 相对水平距离
#默认值是 0.
rely= # 相对垂直距离
#默认值是 0.
width= # 宽度
#无默认值.
x= # 相对于水平的距离,以像素为单位
#默认值是 0.
y= # 相对于垂直的距离,以像素为单位
#默认值是 0.

Pack

pack的调用方式为

pack(**options)

options

anchor=
#默认位置为中心 CENTER ,其他的还有N,NE,E,SE,S,SW,W,NW,CENTER。
expand=
#指定是否应扩展小部件以填充几何主机中的任何额外空间。如果为false(默认),则未扩展小部件。
fill=
#指定小部件是否应该占用父组件提供给它的所有空间。
#NONE(默认)保留小部件的原始大小。
#x(水平填充)
#y(垂直填充)
#BOTH(全部填充)
ipadx=
#水平内部填充。默认值是0。
ipady=
#垂直内部填充。默认值是0。
padx=
#水平扩展,外部填充。默认值是0。
pady=
#垂直扩展,外部填充。默认值是0。
side=
#位置,可选为left,right,top,bottom

Gird

gird的调用方式为

gird(**options)

options

column
#1. 指定组件插入的列(0 表示第 1 列)
#2. 默认值是 0
columnspan
#指定用多少列(跨列)显示该组件
in_
#1. 将该组件放到该选项指定的组件中
#2. 指定的组件必须是该组件的父组件
ipadx
#指定水平方向上的内边距
ipady
#指定垂直方向上的内边距
padx
#指定水平方向上的外边距
pady
#指定垂直方向上的外边距
row
#指定组件插入的行(0 表示第 1 行)
rowspan
#指定用多少行(跨行)显示该组件
sticky
#1. 控制组件在 grid 分配的空间中的位置
#2. 可以使用 "n", "e", "s", "w" 以及它们的组合来定位(ewsn代表东西南北,上北下南左西右东)
#3. 使用加号(+)表示拉长填充,例如 "n" + "s" 表示将组件垂直拉长填充网格,"n" + "s" + "w" + "e" 表示填充整个网格
#4. 不指定该值则居中显示
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值