zoukankan      html  css  js  c++  java
  • TkinterGUI

    前言

    近期有写一个简单GUI程序的点子,具体写什么就不说了,但一个要求就是有跨平台的功能。

    确切的讲,是我希望这个程序写好后能同时在Windows和Linux下运行,而且要方便随时修改。

    对于编程语言,处于练习的目的,我还是选择了Python,版本就用2.7的了,毕竟3版本个人

    觉得有些不习惯。


    推荐文档

    不得不承认,在文档资源方面Tkinter的资源确实不怎么多,但下面这个的确也够我用了。

    http://www.nmt.edu/tcc/help/pubs/tkinter.pdf

    文档是英文的,英文不行的就别抱怨了,趁早转行吧,反正以后我会教育自己的孩子一定要学好英文的。。。


    为什么选用Tkinter

    Python下有许多的GUI模块可供选择,其中不乏比较流行和强大的模块,如wxPython。

    我选择Tkinter的原因其实很简单:

    1. Tkinter是Python安装包里自带的图形库支持包,无需额外安装,方便

    2. Tkinter是轻量级的GUI方案,轻量级的缺点是不能做太复杂的界面,我需要的只是写拥有几个按钮,

        几个文本框,几个复选框这样的简单GUI程序,这个Tkinter是完全可以胜任的了。轻量级的好处就是简单。

        对于我来说,快速的写出我想要的东西是很重要的,我可不希望写个GUI还需要先学习很长一段时间。。。

    3. Python的GUI编辑器IDLE就是使用Tkinter实现的,我觉得我写的东西应该不会比它复杂

    4. 我对于GUI的外观没有很苛刻的要求,而且Tkinter有一个叫ttk的模块,支持本地化的主题样式,做出来的

        GUI程序并不会太丑。


    Tkinter是什么

    Tkinter是由Python实现的一个Module,全称Tk interface,它提供了使用Python方式调用Tcl/TK的库最终达到显示图形化界面的目的。

    Tcl/Tk本身是一个GUI图形库,类似于GTK以及Qt。

    在Python Manual中,将Tkinter的调用层次说明了一下,我的理解如下:

    用户的Python程序 - Tkinter Module - C实现的tkinter扩展 -C/Tcl语言实现的Tk插件 -Xlib

    Python本身是跨平台的,Tcl/Tk图形库也是跨平台的,所以Tkinter也能跨平台。。。

    对于Python程序员来说,并不需要详细的了解Tcl/Tk这个图形库,当然如果能了解肯定对于Tkinter的编程是有帮组的。

    就像Java程序员不需要了解C++,但如果了解C++对于Java程序员也是很有帮助的一样的道理。

    我的目的是“快”,所以就不去仔细了解Tck/Tk了,我就参考推荐文档里的内容来做尝试吧。


    最简单的Tkinter例子

    在Tkinter 8.5 reference这个文档中,有一个最简单的例子:

    #!/user/bin/env python
    import Tkinter as tk
    
    class Application(tk.Frame):
        def __init__(self, master=None):
            tk.Frame.__init__(self, master)
            self.grid()
            self.createWidgets()
    
        def createWidgets(self):
            self.quitButton = tk.Button(self, text='Quit', command=self.quit)
            self.quitButton.grid()
    
    app = Application()
    app.master.title('Sample application')
    app.mainloop()
    

    文档中有说明每一条语句的意思,这里我就做个翻译的工作,加上点我自己的理解。

    第1行:这是告诉Shell程序“使用什么程序来执行这个脚本程序”,这在Linux下的脚本语言基本都支持这样的语句(Windows下此句无意义),抛开它的实际意义不谈,这就是一个注释。

    第2行:导入Tkinter模块的命名空间(也就是类以及符号等内容),并将其命名空间重映射为tk(为了编程时少打几个字。。。)

    第4行:这里自己定义了一个名叫Application的类且指明此类是继承自tk.Frame类的,也就是说:tk.Frame所支持的方法和成员,Application也都支持。

    第5行:__init__函数是class中的一个特殊方法,类似于C++中的构造函数,通常大家就叫它构造函数

    第6行:调用父类的构造函数,通常子类的构造函数都需要调用父类的构造函数,这可以说也是继承的一个典型表现

    第7行:这里调用了一个grid方法,这是为了将程序显示出来所需要的,文档中有关于grid的详细介绍,后续可能会深入了解,此处就不进一步深入了。

    第10行:为Application创建了一个方法,此方法中创建了一个Button按钮,并且设置了Button按钮的属性,如:显示的字符为Quit,对应的命令函数为self.quit

    第14行:这里创建了一个Application类的实例,此实例一创建就会运行__init__这个方法,也就是构造函数

    第15行:调用一个方法来设置窗口的标题内容为“Sample application”

    第16行:这里开始进行GUI程序的消息循环,实际上类似于MFC中的主循环,此时GUI程序就处于死循环中一直等待各种消息事件(如鼠标,键盘等消息)


    程序执行后显示的GUI界面如下:


    有点丑?没关系,人都可以整容,程序难道还不能美化,咱先关注的是内在美,先把功能实现了,有时间再做美化的工作,反正这个程序是咱自己用的。。


    小结

    经过查资料,以及简单的学习,了解可Tkinter是个什么东西,并对使用其搭建的GUI程序框架有了一个简单直观的了解。

    到目前为止,Tkinter给我的感觉是:新鲜而直接


  • 相关阅读:
    过用户层HOOK思路
    Linux LVM实践
    matlab演奏卡农 Cripple Pachebel's Canon on Matlab
    rman备份恢复总结
    郁金香VC外挂教程(全) 翻录版 免Key(精品教程)
    C# string 中的 @ 作用处理\等字符
    (抓)2分法通用存储过程分页(top max模式)版本(性能相对之前的not in版本极大提高)
    怎样应用OracleParameter怎样写like查询语句?
    (转)DirectoryEntry的使用
    解决模式对话框和window.open打开新页面Session会丢失问题
  • 原文地址:https://www.cnblogs.com/riskyer/p/3281481.html
Copyright © 2011-2022 走看看