Python GUI tkinter编程

参考文章http://blog.csdn.net/trochiluses/article/details/22212645

介绍:

tkinter是Python自带的GUI图形库,在我的Python3.5.2中无需手动安装

Python的还有其他的一些常用GUI库,PyGTK, PyQt, and wxPython,除此之外还有很多其他Python GUI库,而且大多都是跨平台的

使用Python库时多使用dir(),help()信息会有很大的帮助


创建并运行GUI的过程如下:
1)导入Tkinter模块
2)创建顶层串口对象top(名字不限),容纳整个GUI程序
3)在top上创建其他模块
4)将这些GUI模块与底层代码关联
5)进入主循环事件

Tkinter.Tk()返回的窗口是根窗口,一般命名是root或者top。我们可以创建多个顶层窗口(其他所有的组件都放在这个窗口之中),但是只有一个root。
       组件既可以是独立的,也可以作为容器存在,作为容器的时候,他就是容器中组件的父组件。
       组件会有一定的行为和动作:按钮被按下、进度条被拖动、文本框被写入,这些用户行为是“事件”,针对事件的相应动作称为“回调函数”(callback)。用户操作,产生事件,然后相应的callback执行,整个过程被称为事件驱动,很显然,我们需要定义callback函数。
        界面编程的工作主要有三个:组件的创建与布局,组件间动作的关联,回调函数的处理


tkinter编程:

1、创建顶层窗口

import tkinter as tk	#导入tkinter
top = tk.Tk()		#添加主布局


2、在顶层窗口中添加组件

组件有:

Button:按钮,类似标签,提供额外的功能:鼠标掠过、按下、释放、键盘操作

Canvas:画布,提供绘图功能

checkbutton:选择按钮,可以选择任意个

Entry:文本框

Frame:框架,包含其他组件的纯容器

label:注意,不是lable

listbox:列表框

menu:菜单

menubutton:菜单按钮

message:消息框,可以显示多行文本

radiobuttonscale:单选按钮

scrollbar:滚动条——对其支持的组件(文本框、画布、列表框、文本区域)提供滚动功能

text:文本区域

scale:进度条

toplevel:顶级,类似框架,提供一个单独的容器。

提供给Tk支持的其他模块:

tkinter.scrolledtext 可滚动的文字部件;
tkinter.colorchooser 颜色选择对话框;
tkinter.commondialog 对话框基础类;
tkinter.filedialog 文件对话框;
tkinter.font 字体;
tkinter.messagebox 标志Tk消息对话框;
tkinter.simpledialog 基础简洁的对话框;
tkinter.dnd tkinter拖放支持;
turtle

Turtle graphics in a Tk window. 

3、组件的创建与布局

btn_left = tk.Button(top, text='hi')		#创建按钮并设置父容器为top,设置按钮文字
btn_left.pack(side='left', padx=3, pady=3)	#将组件打包到父容器中显示,设置显示参数
或使用
btn_left = tk.Button(top, text='hi').pack(side='left')


其中pack函数参数有(翻译可能不是很准确):
    after=widget - pack it after you have packed widget;放到已经添加的组件之后
    anchor=NSEW (or subset) - position widget according to
                              given direction;给定组件方向
    before=widget - pack it before you will pack widget;放在将给组件之前
    expand=bool - expand widget if parent size grows;如果父容器尺寸变大,组件也跟着变大
    fill=NONE or X or Y or BOTH - fill widget if widget grows;组件变大方向
    in=master - use master to contain this widget;将组件放在容器中
    in_=master - see 'in' option description
    ipadx=amount - add internal padding in x direction;x方向内边缘填充
    ipady=amount - add internal padding in y direction;y方向内边缘填充
    padx=amount - add padding in x direction;x方向外边缘填充
    pady=amount - add padding in y direction;y方向外边缘填充
    side=TOP or BOTTOM or LEFT or RIGHT -  where to add this widget.;位置
同时,在父容器top中还能创建子容器frame,组件同样添加到子容器frame中

frame = tk.Frame(top)  #创建框架容器,可以在容器内布局

sbar = tk.Scrollbar(frame).pack(side='left', fill='y')
listbox = tk.Listbox(frame, height=15, width=50).pack(side='left', fill='both')

frame.pack()


4、逻辑响应
和大多数GUI编程一样,采用callback回调编程,即事件发生后调用回调函数响应。在Qt中为产生事件信号后通知槽函数响应,需要将信号与槽绑定,在这里也是一样,需要将事件与回调函数绑定。
绑定和事件:
绑定函数能让你监听确定的事件 并且当事件发生的时候触发回调函数. The form of the bind method is:
def bind(self, sequence, func, add=''):
输入help(tk.Button.bind)可以看到
sequence 是一个字符串,表示事件。格式为<MODIFIER-MODIFIER-TYPE-DETAIL> 

MODIFIER 有Control, Mod2, M2, Shift, Mod3, M3, Lock, Mod4, M4,Button1, B1, Mod5, M5 Button2, B2, Meta, M, Button3,B3, Alt, Button4, B4, Double, Button5, B5 Triple,Mod1, M1. 

TYPE 有 Activate, Enter, Map,ButtonPress, Button, Expose, Motion, ButtonRelease,FocusIn, MouseWheel, Circulate, FocusOut, Property,Colormap, Gravity Reparent, Configure, KeyPress, Key,Unmap, Deactivate, KeyRelease Visibility, Destroy,Leave;

DETAIL是按键 ButtonPress,ButtonRelease 的数并且DETAIL 是 Keysym for KeyPress andKeyRelease. 

例如<Control-Button-1> 是按住 Control 加 按键 “1”

func 是一个Python函数名,当事件发生时调用
add 不传参数表示此事件的这个绑定会取代其他的当前事件callback绑定,传'+'表示此绑定加入当前事件响应函数队列中
例如:

button.bind("<Enter>", button_callback)	


5、完整示例

import tkinter as tk

def button_callback(event):
    print("ButtonPress")

top = tk.Tk()   #创建主容器

btn = tk.Button(top, text='click')       #创建按钮并设置父容器为top,设置按钮文字
btn.pack(side='right')                 #将组件打包到父容器中显示,设置显示参数



frame = tk.Frame(top)  #创建框架容器,可以在容器内布局

sbar = tk.Scrollbar(frame).pack(side='left', fill='y')
listbox = tk.Listbox(frame, height=15, width=50).pack(side='left', fill='both')

frame.pack()


btn.bind("<ButtonPress>", button_callback)


当然,以上代码只是最基本的结构。如果需要更好的响应,需要查看各个控件的属性,在回调函数中改变。
小结:GUI编程中有了想法之后,先布局即创建控件(控件可以是布局框架),根据控件属性(利用help文档)控制显示效果,绑定事件响应函数来改变控件属性完成逻辑功能。













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值