Python--TKinter
GUI 介绍
GraphicalUserInterface
GUI for Python: TKinter, wxPython, PyQt
TKinter:
绑定的是 TK GUI 工具集,用 Python 包装的 Tcl 代码
PyGIK
TKinter 的替代品
wxPython
跨平台的 Python GUI
PyQt
跨平台的
商业授权可能有问题
推荐资料
辛星 GUI,辛星 Python(简洁、清晰)
Python GUI Programming cookbook
TKinter reference a GUI for Python
TKinter 常用组件
按钮
文本输入组件
标签组件
菜单
滚动条
其他组件
组件的大致使用步骤
创建总面板
创建面板上的各种组件
指定组件的父组件,即附属关系
利用相应的属性对组件进行设置
给组件安排布局
同步骤 2 相似,创建好多个组件
最后,启动总面板的消息循环
组件布局
控制组件的摆放方式
三种布局:
pack:按照方位布局
place:按照坐标布局
grid:网格布局
pack 布局
最简单,代码量最少,挨个摆放,默认从上到下,系统自动设置
通用使用方式为:组件对象.pack(设置....)
side: 停靠方位,可选值为 LEFT,TOP,RIGHT,BOTTOM
fill:填充方式,X,Y,BOTH,NONE
expande(是否填充):YES/NO
anchor(停靠方向):N,E,S,W,CENTER
ipadx:x 方向的内边距
ipady:y 方向的内边距
padx:x 方向外边界
pady:y 方向外边界
grid 布局
通用使用方式:组件对象.grid(设置....)
利用 row,column 编号,都是从 0 开始
sticky:N,E,S,W 表示上下左右,用来决定组件从哪个方向开始
支持 ipadx,padx 等参数,跟 pack 吉函数含义一样
支持 rowspan,columnapan,表示跨行,跨行数量
place 布局
明确方位的摆放
相对位置布局,随意改变窗口大小会导致混乱
使用 place 函数,分为绝对布局和相对布局,绝对布局是使用 x,y 参数
相对布局是使用 relx,rely,relheight,relwidth
消息机制
消息的传递机制
自动发出事件/消息
消息由系统负责发送到队列
由相关组件进行绑定/设置
后端自动选择感兴趣的事件并做出相应的反应
消息格式:
<[modifier-]---type-[-detail]>
<Button-1>: Button 表示一个按钮事件,1 代表的是鼠标左键,2 代表中键
<KeyPress-A>:键盘 A 键位
<Control-Shift-KeyPress-A>: 同时按下 Control、Shift、A 三个键位
<F1>:F1 键盘
TKinter 的绑定
bind_all:全局范围的绑定,默认的是全局快捷键,比如 F1 是帮助文档
bind_class:接受三个参数,第一个是类名,第二个是事件,第三个是操作
w._bind_class("Entry", "<Control-V>", my_paste)
bind:单独对某一个实例绑定
unbind:解绑,需要一个参数,即你要解绑哪个事件
Entry
输入框,功能单一
entry["show"] = "*",设置遮挡字符
菜单
普通菜单
第一个 Menu 类定义的是 parent
add_command 添加菜单项,如果菜单是顶层菜单,则从左向右添加,否则就是下拉菜单
label:指定菜单项名称
command:点击后相应的调用函数
acceletor:快捷键
underline:指定是否菜单信息下有横线
menu:属性指定哪一个作为顶级菜单
级联菜单
add_cascade:级联菜单,作用是引出后面的菜单
add_cascade 的 menu 属性:指定把菜单级联到哪个菜单上
label:名称
过程:
建立 menu 实例
add_command
add_cascade
弹出式菜单
弹出菜单也叫上下文菜单
实现的大致思路
建立菜单并向菜单添加各种功能
监听鼠标右键
如果右键点击,则根据位置判断弹出
调用 Menu 的 pop 方法
add_separator:添加分隔符
canvas 画布
画布:可以自由的在上面绘制图形的一个小舞台
在画布上绘制对象,通常用 create_xxxx,xxxx=对象类型,例如 line,rectangle
画布的作用的把一定的组件画到画布上显示出来
画布所支持的组件:
arc(圆或者弧)
bitmap(一个位图)
image(BitmapImage,PhotoImage)(图片)
line(线)
oval(椭圆形)
polygon(多边形)
rectangle(四边形)
text(文字)
window(组件)
每次调用 create_xxx 都会返回一个创建的组件的 ID,同时也可以用 tag 属性指定其标签
通过调用 canvas.move 实现一个一次性动作
版权声明: 本文为 InfoQ 作者【若尘】的原创文章。
原文链接:【http://xie.infoq.cn/article/28a6ca20f4ea66f41808f6983】。文章转载请联系作者。
评论