设为首页 收藏本站
查看: 652|回复: 0

[经验分享] Python之Tkinter:动作

[复制链接]

尚未签到

发表于 2018-8-3 10:45:31 | 显示全部楼层 |阅读模式
  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()
  

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-545791-1-1.html 上篇帖子: CrazyWing:Python自动化运维开发实战 四、Python变量 下篇帖子: python实现跳板机
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表