您的位置:首页 > 编程语言 > Python开发

Python之Tkinter:动作

2013-02-27 11:08 211 查看
Python之Tkinter:动作

进行界面编程,首先少不了以下几个重要部分:

l
窗体

l
控件

l
动作
窗体是容器,各式各样的控件放置在容器中,每种控件在触发之后都会执行一定的指令,即完成它的动作。
怎样将控件绑定到一个命令上?一般来说在创建控件的时候,使用参数command来指定要执行的动作,这个动作可以使以下几类情况:
l
普通函数
l
同属于一个类的其他成员函数
l
内置函数
l
lamda函数
怎样创建窗口?一般来说有这么几种方法,一种是过程式的,使用Tk()。还有一种是面向对象式的,即:继承自Frame. Tk()返回的对象是根容器,Frame产生的对象可以放置在Tk()返回的对象中。
每个窗口在创建之后,使用pack对自己进行布局,并使自己可见。布局的方式可以使用expand、fill、side等。
控件对事件的绑定调用函数bind,第一个参数为表示事件的字符串,第二个为要执行的动作,动作的来源前面已经叙述。
下面为一些例子:

#!/usr/bin/python

from Tkinter import *

def quit():

print "I have to leave now ..."

import sys

sys.exit()

b = Button(None,text="quit",bg="red",command=quit)

b.pack()

b.mainloop()

创建一个Button,点击后执行的动作为退出。

#!/usr/bin/python

from Tkinter import *

class ClassCall():

def __init__(self):

self.msg="call from a class.\n"

def __call__(self):

print self.msg

import sys

sys.exit()

widget = Button(None,text="test",command=ClassCall())

widget.pack()

widget.mainloop()

将一个类的实例指定为动作,默认时调用该类的__call__方法。

#!/usr/bin/python

from Tkinter import *

class InnerClass():

def __init__(self):

self.b = Button(None,text="test",command = self.call)

self.b.pack()

def call(self):

print "I am leaving now..."

import sys

sys.exit()

InnerClass()

mainloop()

调用同一个类内部的成员函数

#!/usr/bin/python

from Tkinter import *

class GuiDesign():

def __init__(self,parent=None):

self.top = Frame(parent)

self.top.pack()

self.data = 0

self.layout()

def layout(self):

Button(self.top,text="exit",command=self.top.quit).pack(side = LEFT)

Button(self.top,text="hi",command=self.hi).pack(side = RIGHT)

def hi(self):

self.data += 1

print "hi:%d" % self.data

frm = Frame()

frm.pack()         #easy to make mistake here.

Label(frm,text="hello").pack(side=TOP)

GuiDesign(frm).top.mainloop()

将Frame对象作为参数使用

#!/usr/bin/python

from Tkinter import *

def showPosEvent(event):

print 'Widget=%s X=%s Y=%s' % (event.widget, event.x, event.y)

print 'Got key perss:',event.char

tkroot = Tk()

labelfont = ('courier', 20, 'bold')

widget = Label(tkroot, text='Hello bind world')

widget.config(bg='red', font=labelfont)

widget.config(height=5, width=20)

widget.pack(expand=YES, fill=BOTH)

widget.bind('<KeyPress>',  showPosEvent)

widget.focus()

tkroot.title('Click Me')

tkroot.mainloop()

响应按键事件,以及动态配置控件的方式
本文出自 “相信并热爱着” 博客,请务必保留此出处/article/4313829.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: