概述:

简介

  • Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里.Tk8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。

目的:

  1. 网络上对于Tinker都是比较散乱的介绍,需要花费大量时间理清楚,实际上我发现理解Tkinter的就很简单的事件,一般包括界面的组织,控件的学习,事件的绑定。窗口间的通讯。

x  2: 代码链接:https://gitee.com/dgwcode/an_example_of_py_learning/tree/master/language_python/LearTinker

入门:

  1. 基本窗口绘制:
    1.   win.geometry('600x800+500+50'); x 必须为小写字母x
import tkinter;
# 创建主窗口
win=tkinter.Tk();
win.title("HI Tkinker");
win.geometry('600x800+500+50');
# 进入消息循环,可以写控件
...
win.mainloop();

  

布局

绝对布局place:

参数
anchor:   组件对齐方式;n, ne, e, se, s, sw, w, nw, or center ; ('n'==N)
x:   组件左上角的x坐标;
y:     组件左上角的y坐标;
relx:    组件左上角相对于窗口的x坐标,应为0-1之间的小数;图形位置相对窗口变化
rely:    组件左上角相对于窗口的y坐标,应为0-1之间的小数;
width:  组件的宽度;
heitht:   组件的高度;
relwidth:  组件相对于窗口的宽度,0-1之间的小数,图形宽度相对窗口变化;
relheight:  组件相对于窗口的高度,0-1之间的小数;

# coding=utf-

import tkinter;

win = tkinter.Tk();
win.title('绝对布局')
win.geometry(
'400x600+400+50'
);
# 写入button测试布局
bt1 = tkinter.Button(win, text='按钮1', bg='red');
bt2 = tkinter.Button(win, text='按钮2', bg='black');
bt3 = tkinter.Button(win, text='按钮3', bg='yellow'); # 设置位置
bt1.place(x=,y=);
bt2.place(x=,y=);
bt3.place(x=,y=); win.mainloop();

相对布局pack

参数
after:   将组件置于其他组件之后;
before:   将组件置于其他组件之前;
anchor:   组件的对齐方式,顶对齐'n',底对齐's',左'w',右'e'
side:   组件在主窗口的位置,可以为'top','bottom','left','right'(使用时tkinter.TOP,tkinter.LEFT);
fill: 填充方式 (Y,垂直,X,水平,BOTH,水平+垂直),是否在某个方向充满窗口

expand           1可扩展,0不可扩展,代表控件是否会随窗口缩放

# coding=utf-8

import tkinter;

win = tkinter.Tk();
win.title('绝对布局')
win.geometry(
'400x600+400+50'
);
# 写入button测试布局
bt1 = tkinter.Button(win, text='按钮1', background='red');
bt2 = tkinter.Button(win, text='按钮2', bg='black');
bt3 = tkinter.Button(win, text='按钮3', bg='yellow'); # 设置位置
bt1.pack(side=tkinter.TOP);
bt2.pack(side=tkinter.LEFT);
bt3.pack(side=tkinter.RIGHT); win.mainloop();

表格布局、grid、

概念
column:    组件所在的列起始位置;                                             
columnspan:  组件的列宽;跨列数
row:   组件所在的行起始位置;
rowspan: 组件的行宽;rowspam=3   跨3行
sticky             对齐方式:NSEW(北南东西)上下左右               
padx、pady x方向间距、y方向间距(padx=5)

import tkinter;

win = tkinter.Tk();
win.title('绝对布局')
win.geometry(
'400x600+400+50'
);
# 写入button测试布局
bt1 = tkinter.Button(win, text='按钮1', background='red');
bt2 = tkinter.Button(win, text='按钮2', bg='red');
bt3 = tkinter.Button(win, text='按钮3', bg='red');
bt4 = tkinter.Button(win, text='按钮4', bg='red');
bt5 = tkinter.Button(win, text='按钮5', bg='red');
bt6 = tkinter.Button(win, text='按钮6', bg='red'); # 设置位置
bt1.grid(row=,column=,ipadx=,ipady=);
bt2.grid(row=,column=);
bt3.grid(row=,column=); #对比 跨三行
bt4.grid(row=,column=,rowspan=);
bt5.grid(row=,column=);
bt6.grid(row=,column=);
win.mainloop();

控件:

  • Label控件
  • Button
  • Entry
  • Text
  • Checkbutton
  • Radiobutton
  • Listbox
  • Scale
  • SpinBox
  • Menu
  • Combobox
  • Frame

事件

鼠标事件类型:

<Button-1> 按下了鼠标左键 <ButtonPress-1>
<Button-2> 按下了鼠标中键 <ButtonPress-2>
<Button-3> 按下了鼠标右键 <ButtonPress-3>
<Enter> 鼠标进入组件区域
<Leave> 鼠标离开组件区域
<ButtonRelease-1> 释放了鼠标左键
<ButtonRelease-2> 释放了鼠标中键
<ButtonRelease-3> 释放了鼠标右键
<B1-Moion> 按住鼠标左键移动
<B2-Moion> 按住鼠标中键移动
<B3-Moion> 按住鼠标右键移动
<Double-Button-1> 双击鼠标左键
<Double-Button-2> 双击鼠标中键
<Double-Button-3> 双击鼠标右键
<MouseWheel> 滚动鼠标滚轮

键盘事件类型:

<KeyPress-A> 表示按下键盘A键 A可以设置为其他的按键
<Alt-KeyPress-A> 表示同时按下Alt和A键 A可以设置为其他的按键
<Control-KeyPress-A> 表示同时按下Ctrl和A键 A可以设置为其他的按键
<Shift-KeyPress-A> 表示同时按下Shift和A键 A可以设置为其他的按键
<Double-KeyPress-A> 表示双击键盘A键 A可以设置为其他的按键
<Lock-KeyPress-A> 表示开启大写之后键盘A键 A可以设置为其他的按键
<Alt-Control-KeyPress-A> 表示同时按下alt+Ctrl和A键 A可以设置为其他的按键

注意:键盘事件除了entry和text组件其他组件的事件最好绑定在主界面上事件对象中包含的信息

c. event 对象包含的事件信息

x,y 当前触发事件时鼠标相对触发事件的组件的坐标值
x_root,y_root 当前触发事件时鼠标相对于屏幕的坐标值
char 获取当前键盘事件时按下的键对应的字符
keycode 获取当前键盘事件时按下的键对应的的ascii码
type 获取事件的类型
num 获取鼠标按键类型 123 左中右
widget 触发事件的组件
width/height 组件改变之后的大小和configure()相关

d:窗口和组件相关事件类型:

Activate 当中组件由不可以用变为可用时 针对于state的变值
Deactivate 当组件由可用变为不可用时触发
Configure 当组件大小发生变化时触发
Destory 当组件销毁时触发
FocusIn 当组件获取焦点时触发 针对于Entry和Text有效
Map 当组件由隐藏变为显示时触发
UnMap 当组件由显示变为隐藏时触发
Perproty 当窗口属性发生变化时触发

其他常用模块

(简单对话/文件对话/颜色对话)

tkinter.simpledialog模块 可以创建标准的输入对话框。
tkinter.filedialog模块 可以创建文件打开和保存文件对话框。
tkinter.colorchooser模块 可以创建颜色选择对话框。

tkinter.simpledialog模块

tkinter.simpledialog.askstring(标题,提示文字,初始值) 输入字符串
tkinter.simpledialog.askinteger(title,prompt,initialvalue) 输入整数
tkinter.simpledialog.askfloat(title,prompt,initialvalue) 输入浮点型
注意:第三个参数为关键字参数

tkinter.filedialog模块

建议使用easygui 代替
tkinter.filedialog.askopenfilename(关键字参数传入) 选取单个文件 创建标准的【 打开 文件】对话框。
.askopenfilenames 选取多个文件
.askdirectory 弹出选取压缩地址路径的对话框
tkinter.filedialog.asksaveasfilename(关键字参数传入) 可以创建标准的【 保存 文件】对话框。
filetypes 指定文件类型。  
initialdir 指定默认目录。  
 initialfile 指定默认文件。  
 title 指定对话框标题。
 

tkinter.colorchooser模块

tkinter.colorchooser.askcolor(关键字参数传入)

initialcolor 指定 初始化 颜色。  
title 指定 对话框 标题。

Tkinter最佳实践(半小时)的更多相关文章

  1. ASP.NET跨平台最佳实践

    前言 八年的坚持敌不过领导的固执,最终还是不得不阔别已经成为我第二语言的C#,转战Java阵营.有过短暂的失落和迷茫,但技术转型真的没有想象中那么难.回头审视,其实单从语言本身来看,C#确实比Java ...

  2. MongoDB最佳实践中文手册

    背景:查阅了一下MongoDB的相关文档,发现中文文档还是比较少的,工作中需要用到MongoDB,而这本<MongoDB最佳实践>是很好的选择,所以就把这本手册翻译了一下,其中生涩的专业用 ...

  3. 再谈RESTAPI最佳实践

    近一年半,我参与了两到三个项目的工作,这些项目涉及到大量供“外部”使用的REST API,稍后我们会看到为什么要将“外部”这个词放在引号之中.在项目工作期间,我不得不对这些API进行反复地设计,再设计 ...

  4. OpenResty 最佳实践 (2)

    此文已由作者汤晓静授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. lua 协程与 nginx 事件机制结合 文章前部分用大量篇幅阐述了 lua 和 nginx 的相关知识,包 ...

  5. SQL Server集成服务最佳实践:语句优化

        SQL Server集成服务(SQL Server Integration Services,SSIS)在其前辈DTS(Data Transformation Services,数据转换服务) ...

  6. 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生

    [转].NET(C#):浅谈程序集清单资源和RESX资源   目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...

  7. 吴太银:华为消费者云服务Cassandra使用场景与最佳实践

    大家好,我是华为消费者云的吴太银. 我今天分享的主要是华为消费者云服务使用Cassandra的应用场景和最佳实践.我这个可能跟其他嘉宾分享的不太一样,因为前几个嘉宾讲的实际上对Cassandra原生的 ...

  8. Canvas 最佳实践(性能篇)

    Canvas 想必前端同学们都不陌生,它是 HTML5 新增的「画布」元素,允许我们使用 JavaScript 来绘制图形.目前,所有的主流浏览器都支持 Canvas. Canvas 最常见的用途是渲 ...

  9. 敏捷遇上UML-需求分析及软件设计最佳实践(郑州站 2014-6-7)

      邀请函: 尊敬的阁下:我们将在郑州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实 ...

随机推荐

  1. Oracle查看 open_cursors 和 session_cached_cursors

    本文转自 http://blog.itpub.net/25583515/viewspace-2152997/ 查看当前session已使用的最大open cursor数 和cached cursor数 ...

  2. unittest---unittest简单介绍

    说起python的单元测试,第一反应肯定就会是unittest,unittest作为python的标准库,很优秀,也被广泛的用到各个项目,但是你们知道吗?python的单元测试并不只有这一个,还有个p ...

  3. 高阶函数&&高阶组件(二)

    高阶组件总共分为两大类 代理方式 操纵prop 访问ref(不推荐) 抽取状态 包装组件 继承方式 操纵生命周期 操纵prop 代理方式之 操纵prop 删除prop import React fro ...

  4. ROS基础-基本概念和简单工具(1)

    1.什么是ROS? Robot operating System ,简单说机器人操作系统,弱耦合的分布式进程框架,通过进程间的消息传递和管理.实现硬件抽象和设备控制. 2.节点(node) node ...

  5. navicat的一些常用快捷键

    Navicat可以支持连接多种数据库,使用上的功能也比较强大. 如果使用了IDEA内置的数据库工具(个人喜欢用这个)或是SQL Server官方的数据库管理工具的话,会发现使用上都存在区别,区别就主要 ...

  6. 利用重写R3环的ReadProcessMemory来防止恶意程序钩取

    访问这里---> Windows系统调用中API的三环部分(依据分析重写ReadProcessMemory函数)

  7. Jmeter元件——JSON Extractor后置处理器介绍2

    在前段时间将JSON Extractor元件做了个简单的介绍:Jmeter元件——JSON Extractor后置处理器介绍1,今天以一个具体的json,以不同的方式提取数据做个详细的介绍. 一.模拟 ...

  8. C# HttpClient 请求认证、数据传输笔记

    目录 一,授权认证 二,请求类型 三,数据传输 C# HttpClient 请求认证.数据传输笔记 一,授权认证 客户端请求服务器时,需要通过授权认证许可,方能获取服务器资源,目前比较常见的认证方式有 ...

  9. Winform中封装DevExpress的MarqueeProgressBarComtrol实现弹窗式进度条效果

    场景 在Winform中实现弹窗式进度条 就是新建一个窗体,然后在窗体中加入进度条控件,然后在触发进度条的事件中将加载进度报告给 进度条控件. 注: 博客主页: https://blog.csdn.n ...

  10. Dynamics CRM 2015/2016新特性之三十四:有了插件日志,调试插件so easy!

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复217或者20160330可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...