为了账号安全,请及时绑定邮箱和手机立即绑定

Python之Tkinter:动作

标签:
Python


 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() 

响应按键事件,以及动态配置控件的方式

©著作权归作者所有:来自51CTO博客作者hipercomer的原创作品,如需转载,请注明出处,否则将追究法律责任

Pythonpython tkinter actioPython

3


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消