Tkinter之四(TCL/Tk在Python上的移植)

Events and Bindings

 一个Tkinter运用大部分时间都是运行在event loopmainloop()中,events可以包括来自按键、鼠标,或者是window mangaerTkinter widget提高了一种很好的机制让用户处理事件,可以通过widget.bind(eventhandler)来进行绑定。 

from Tkinter import  *
root 
=  Tk()

def callback(
event ):
print “clicked at”, 
event .x,  event .y

frame 
=  Frame(root, width  =   100 , height  =   100 )
frame.bind(“
< Button - 1 > ”, callback)
frame.pack()
root.mainloop()
  • Events

  Events以一个字符串的形式给出,其格式如下:

            <modifier-type-detail>

其中最重要的是type,可以是Buttton, KeyEnterConfigure等,modifierdetail用来指定一些附加的信息,常常可以忽略。下表为Event Formats.

 

Event
Description
<Button-1>
Button 1 为鼠标左键, Button 2 为鼠标中键, Button 3 为鼠标右键。鼠标的位置由 event.x event.y 给出。 <Button-1>, <ButtonPress-1> <1> 都是等价的
<B1-Motion>
鼠标移动。 B1 表示按住左键移动, B2 表示按住中键移动, B3 表示按住右键移动。其位置由 event.x, event.y 给出
<ButtonRelease-1>
鼠标按键松开
<Double-1>
鼠标键双击,现在是能够将 <Button-1> <Double-1> 区分开来的。
<Enter>
鼠标进入 widget
<Leave>
鼠标离开 widget
<Return>
键盘按了 Enter 键。类似的按键还有 Cancel, BackSpace, Tab, Return, Shift_L(any Shift key), Control_L(any Control key), Alt_L(ant Alt key), Pause, Caps_Lock, Escape, Prior(Page Up), Next(Page Down), End, Home, Left, Up, Right, Down, Print, Insert, Delete, F1, F2, F3, F4, …, F12, Num_Lock Scroll_Lock
a
按键为字母 ”a” ,注意其它按键也类似,并且能够区分大小写。出去空格。
<Shift-Up>
按住 Shift 键的同时,按 Up 键。类似的前缀还有 Alt, Shift Control
<Configure>
改变 widget 的大小,改变后的大小在 event.width event.height 中。

  • The Event Object

 

Attribute
Description
widget
表明该 event 是由拿一个 widget 产生的,例如 event.frame == frame
x, y
当前鼠标的位置(以象素为单位)
x_root, y_root
当前鼠标位置相对于屏幕左上角而言的位置
char
Character code(keyboard events only)
keysym
Key symbol(keyboard events only)
keycode
The key code(keyboard events only) ,实际上就是该字母的 ASCII (大写)
num
Buttom number(mouse button event only)
width, height
Configure event 新指定的 widget size
type
Event 类型

  • Instance and class bindings

 widget.bind(…)都是为该widget绑定一个事件,没有继承性。但是,实际上继承可以从四个层次面来绑定。

          the widget instance, using bind

          the widget’s toplevel window(Toplevel or root), also using bind

          the widget class, using bind_class

          the whole application,using bind_all

  • Protocols

  Tkinter也支持protocol handlers。即application和window manager之间的protocol。常用的由WM_DELETE_WINDOW。

 
#File:protocol1.py
from Tkinter import 
*
import tkMessageBox

def callback():
if  tkMessageBox.askokcancel(“Quit”, “Do you really wish to quit ? ”):
     root.destroy()

root 
=  Tk()
root.protocol(“WM_DELETE_WINDOW”

Application Windows

  • Base Windows

 调用Tk的构造函数生成一个root window,如果需要生成其它窗口则需要调用Toplevel()函数。

  • Menus

  Tkinter为Menu提供了一系列widget。菜单的创建需要调用Menu类来完成,可以用add methods为其添加entries(菜单条)。

          add_command(label=string, command=callback),添加菜单条

          add_separator(),添加分割线

     add_cascade(label=string, menu =menu instance),添加层次式菜单

#File: menu1.py

from Tkinter import 
*

def callback():
    print 
" called the callback! "

root 
=  Tk()

menu 
=  Menu(root)
root.config(menu 
=  menu)

filemenu 
=  Menu(menu)
menu.add_cascade(label 
=   " File " , menu  =  filemenu)
filemenu.add_command(label 
=   " New " , command  =  callback)
filemenu.add_command(label 
=   " Open... " , command  =  callback)
filemenu.add_separator()
filemenu.add_command(label 
=   " Exit " , command  =  callback)

helpmenu 
=  Menu(menu)
menu.add_cascade(label 
=   " Help " , menu  =  helpmenu)
helpmenu.add_command(label 
=   " About... " , command  =  callback)

root.mainloop()
  • Toolbars

工具条一般在菜单的下方,为菜单选择提供便捷方式。

#File: toolbar1.py

from Tkinter import 
*

root 
=  Tk()

def callback():
    print 
" called the callback! "

toolbar 
=  Frame(root)

=  Button(toolbar, text  =   " New " , width  =   6 , command  =  callback)
b.pack(side 
=  LEFT, padx  =   2 , pady  =   2 )

=  Button(toolbar, text  =   " open " , width  =   6 , command  =  callback)
b.pack(side 
=  LEFT, padx  =   2 , pady  =   2 )


toolbar.pack(side 
=  TOP, fill  =  X)

mainloop()
  • Status Bars

大多数application window都可以指定状态栏,可用Label widget来实现它。

status = Label(master, text = “”, bd =1, relief = SUNKEN, anchor = W) 

status.pack(side = BOTTOM, fill = X)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值