• [转]pyhon之Tkinter实例化学习


    本文转自:http://www.cnblogs.com/kaituorensheng/p/3287652.html

    Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口,位Python的内置模块,直接import tkinter即可使用。

    作为实践, 用Tkinter做了个ascii码转化查询表

    1. 产品介绍

    界面

      

    功能

    • 通过输入字符或数字查询对应的信息
    • 通过选择列表中的信息查询对应的信息

    2. 设计规划

    规划图

    3. 相关知识

    首先看怎么产生第一个窗口

    from Tkinter import *   #引用Tk模块
    root = Tk()             #初始化Tk()
    root.mainloop()         #进入消息循环

    几个常用属性

    • title: 设置窗口标题
    • geometry: 设置窗口大小
    • resizable():设置窗口是否可以变化长 宽
    复制代码
    # -*- coding: cp936 -*-
    from Tkinter import *
    root = Tk()
    root.title("hello world")
    root.geometry('200x100')                 #是x 不是*
    root.resizable(width=False, height=True) #宽不可变, 高可变,默认为True
    root.mainloop()
    复制代码

    介绍以下几个控件的用法

    • Label
    • Frame
    • Entry
    • Text
    • Button
    • Listbox
    • Scrollbar

    说明每个控件最后要加上pack().否则控件是无法显示的.

    3.1 Label

    说明

      标签

    用法

      Label(根对象, [属性列表])

    属性

    • text    要现实的文本
    • bg    背景颜色
    • font    字体(颜色, 大小)
    • width  控件宽度
    • height 控件高度

      以下介绍的控件差不多都有这几个属性, 更详细的属性查看参考网页

    举例

    复制代码
    # -*- coding: cp936 -*-
    from Tkinter import *
    root = Tk()
    root.title("hello world")
    root.geometry('300x200')
    l = Label(root, text="show", bg="green", font=("Arial", 12), width=5, height=2)
    l.pack(side=LEFT)  #这里的side可以赋值为LEFT  RTGHT TOP  BOTTOM
    root.mainloop()
    复制代码

    效果

      

    3.2 Frame

    说明

      在屏幕上创建一块矩形区域,多作为容器来布局窗体

    用法

      Frame(根对象, [属性列表])

    举例

         要在控件中出现这样的四个词语

                     校训

              厚德        敬业

              博学        乐群     

      可以规划为         

       

    复制代码
    # -*- coding: cp936 -*-
    from Tkinter import *
    root = Tk()
    root.title("hello world")
    root.geometry('300x200')
    
    Label(root, text='校训'.decode('gbk').encode('utf8'), font=('Arial', 20)).pack()
    
    frm = Frame(root)
    #left
    frm_L = Frame(frm)
    Label(frm_L, text='厚德'.decode('gbk').encode('utf8'), font=('Arial', 15)).pack(side=TOP)
    Label(frm_L, text='博学'.decode('gbk').encode('utf8'), font=('Arial', 15)).pack(side=TOP)
    frm_L.pack(side=LEFT)
    
    #right
    frm_R = Frame(frm)
    Label(frm_R, text='敬业'.decode('gbk').encode('utf8'), font=('Arial', 15)).pack(side=TOP)
    Label(frm_R, text='乐群'.decode('gbk').encode('utf8'), font=('Arial', 15)).pack(side=TOP)
    frm_R.pack(side=RIGHT)
    
    frm.pack()
    
    root.mainloop()
    复制代码

    效果

      

    3.3 Entry

    说明

      创建单行文本框

    用法

    •   创建:lb =Entry(根对象, [属性列表])
    •   绑定变量 var=StringVar()    lb=Entry(根对象, textvariable = var)
    •   获取文本框中的值   var.get()
    •   设置文本框中的值   var.set(item1)

    举例

    复制代码
    # -*- coding: cp936 -*-
    from Tkinter import *
    root = Tk()
    root.title("hello world")
    root.geometry()
    var = StringVar()
    e = Entry(root, textvariable = var)
    var.set("hello")
    e.pack()
        
    root.mainloop()
    复制代码

    效果

      

    3.4 Text

    说明

      向该空间内输入文本

    用法

      t = Text(根对象)

      插入:t.insert(mark, 内容)

      删除:t.delete(mark1, mark2)

      其中,mark可以是行号,或者特殊标识,例如

    • INSERT:光标的插入点CURRENT:鼠标的当前位置所对应的字符位置
    • END:这个Textbuffer的最后一个字符
    • SEL_FIRST:选中文本域的第一个字符,如果没有选中区域则会引发异常
    • SEL_LAST:选中文本域的最后一个字符,如果没有选中区域则会引发 异常

    举例

    复制代码
    # -*- coding: cp936 -*-
    from Tkinter import *
    root = Tk()
    root.title("hello world")
    root.geometry('300x200')
    
    t = Text(root)
    t.insert(1.0, 'hello
    ')
    t.insert(END, 'hello000000
    ')
    t.insert(END, 'nono')
    t.pack()
    
    root.mainloop()
    复制代码

    效果

      

    3.5 Button

    说明

      创建按钮

    用法

      Button(根对象, [属性列表])

    举例

    复制代码
    # -*- coding: cp936 -*-
    from Tkinter import *
    root = Tk()
    root.title("hello world")
    root.geometry()
    
    def printhello():
        t.insert('1.0', "hello
    ")
        
    t = Text()
    t.pack()
    Button(root, text="press", command = printhello).pack()
    root.mainloop()
    复制代码

    效果

      

    3.6 Listbox

    说明

      列表控件,可以含有一个或多个文本想,可单选也可多选

    用法

    •   创建:lb = ListBox(根对象, [属性列表])
    •   绑定变量 var=StringVar()    lb=ListBox(根对象, listvariable = var)
    •   得到列表中的所有值   var.get()
    •   设置列表中的所有值   var.set((item1, item2, .....))
    •   添加:lb.insert(item)
    •   删除:lb.delete(item,...)
    •   绑定事件 lb.bind('<ButtonRelease-1>', 函数)
    •   获得所选中的选项 lbl.get(lb.curselection())

    属性

      selectmode可以为BROWSE MULTIPL SINGLE

    举例

    复制代码
    # -*- coding: cp936 -*-
    from Tkinter import *
    root = Tk()
    root.title("hello world")
    root.geometry()
    
    def print_item(event):
        print lb.get(lb.curselection())
        
    var = StringVar()
    lb = Listbox(root,  listvariable = var)
    list_item = [1, 2, 3, 4]         #控件的内容为1 2 3 4
    for item in list_item:
        lb.insert(END, item)
    lb.delete(2, 4)                  #此时控件的内容为1 3 
    var.set(('a', 'ab', 'c', 'd'))   #重新设置了,这时控件的内容就编程var的内容了
    print var.get()
    lb.bind('<ButtonRelease-1>', print_item)
    lb.pack()
        
    root.mainloop()
    复制代码

    效果

      

    3.7 Scrollbar

    说明

      在屏幕上创建一块矩形区域,多作为容器来布局窗体

    用法

      Frame(根对象, [属性列表]), 最长用的用法是和别的控件一起使用.

    举例

    复制代码
    from Tkinter import *
    root = Tk()
    root.title("hello world")
    root.geometry()
    
    def print_item(event):
        print lb.get(lb.curselection())
        
    var = StringVar()
    lb = Listbox(root, height=5, selectmode=BROWSE, listvariable = var)
    lb.bind('<ButtonRelease-1>', print_item)
    list_item = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    for item in list_item:
        lb.insert(END, item)
        
    scrl = Scrollbar(root)
    scrl.pack(side=RIGHT, fill=Y)
    lb.configure(yscrollcommand = scrl.set)
    lb.pack(side=LEFT, fill=BOTH)
    scrl['command'] = lb.yview
    
    root.mainloop()
    复制代码

    效果

      

    4. 源码附件

    代码

    # -*- coding:cp936 -*-
    from Tkinter import *
    
    class show:
        num_info_hash = {}
        char_info_hash = {}
        num_char = {}
        char_num = {}
        def __init__(self):
            
            self.root = Tk()
            self.root.title("ASCII码查询".decode('gbk').encode('utf8'))
            #self.root.geometry('470x320')
            ########
            self.frm = Frame(self.root)
            #Top
            Label(self.root, text="ASCII码查询".decode('gbk').encode('utf8'), font=('Arial', 15)).pack()
            self.load_sys()
            self.frm = Frame(self.root)
            #Left
            self.frm_L = Frame(self.frm)
            self.frm_LT = Frame(self.frm_L)
            self.var_char = StringVar()
            Entry(self.frm_LT, textvariable=self.var_char, width = 5, font =('Verdana',15)).pack(side=RIGHT)
            Label(self.frm_LT, text = '字符'.decode('gbk').encode('utf8'), font =('Arial',12)).pack(side=LEFT)
            self.frm_LT.pack()
    
            self.var_L_char = StringVar()
            self.lb_char = Listbox(self.frm_L, selectmode=BROWSE, listvariable=self.var_L_char, font =('Verdana',12), width=10, height=13)
            self.lb_char.bind('<ButtonRelease-1>', self.get_char)
            for key in self.char_num:
                self.lb_char.insert(END, key[0])
            self.scrl_char = Scrollbar(self.frm_L)
            self.scrl_char.pack(side=RIGHT, fill=Y)
            self.lb_char.configure(yscrollcommand = self.scrl_char.set)
            self.lb_char.pack(side=LEFT, fill=BOTH)
            self.scrl_char['command'] = self.lb_char.yview
    
            self.frm_L.pack(side = LEFT)
    
            #Mid
            self.frm_M = Frame(self.frm)
            self.t_show = Text(self.frm_M, width=20, height=5, font =('Verdana',15))
            self.t_show.insert('1.0', '')
            self.t_show.pack()
    
            self.frm_MB = Frame(self.frm_M)
            Button(self.frm_MB, text="清除".decode('gbk').encode('utf-8'), command=self.clear, width=6, height=1, font=('Arial', 10)).pack(side=LEFT)
            Button(self.frm_MB, text="查询".decode('gbk').encode('utf-8'), command=self.search, width=6, height=1, font=('Arial', 10)).pack(side=RIGHT)
            self.frm_MB.pack(side=BOTTOM)
    
            self.frm_M.pack(side=LEFT)
            
            #Right
            self.frm_R = Frame(self.frm)
            self.frm_RT = Frame(self.frm_R)
            self.var_int = StringVar()
            Entry(self.frm_RT, textvariable=self.var_int, width=5, font =('Verdana',15)).pack(side=LEFT)
            Label(self.frm_RT, text='十进制'.decode('gbk').encode('utf-8'), font =('Arial',12)).pack(side=RIGHT)
            self.frm_RT.pack()
            self.var_R_int = StringVar()
            self.lb_int = Listbox(self.frm_R, selectmode=BROWSE, listvariable=self.var_R_int, font =('Verdana',12), width=10, height=13)
            self.lb_int.bind('<ButtonRelease-1>', self.get_int,)
            for key in self.num_char:
                self.lb_int.insert(END, key[0])
            self.scrl_int = Scrollbar(self.frm_R)
            self.scrl_int.pack(side=RIGHT, fill=Y)
            self.lb_int.configure(yscrollcommand = self.scrl_int.set)
            self.lb_int.pack(side=LEFT, fill=BOTH)
            self.scrl_int['command'] = self.lb_int.yview
    
            self.frm_R.pack(side = LEFT)
    
            self.frm.pack()
            ########
    
            
        def get_char(self, event):
            self.var_char.set('')
            self.var_int.set('')
            tmp = self.lb_char.get(self.lb_char.curselection())
            self.var_char.set(tmp)
        def get_int(self, event):
            self.var_int.set('')
            self.var_char.set('')
            tmp = self.lb_int.get(self.lb_int.curselection())
            self.var_int.set(tmp)
        def clear(self):
            self.var_char.set('')
            self.var_int.set('')
            self.t_show.delete('1.0', '10.0')
        def search(self):
            self.t_show.delete('1.0', '100.0')
            tmp_char = self.var_char.get()
            tmp_int = self.var_int.get()
            if tmp_char != '':
                if not self.char_info_hash.has_key(tmp_char):
                    self.t_show.insert('1.0', "您输入的字符不在128个字符之内".decode('gbk').encode('utf8'))
                else:
                    self.t_show.insert('1.0', '十六进制:'.decode('gbk').encode('utf8') + '	' + self.char_info_hash[tmp_char][2] + '
    ')
                    self.t_show.insert('1.0', '十进制:'.decode('gbk').encode('utf8') +'	' + self.char_info_hash[tmp_char][1] + '
    ')
                    self.t_show.insert('1.0', '八进制:'.decode('gbk').encode('utf8') + '	' + self.char_info_hash[tmp_char][0] + '
    ')
                    self.t_show.insert('1.0', '字符:'.decode('gbk').encode('utf8') +'	' + tmp_char + '
    
    ')
                self.var_char.set('')
                self.var_int.set('')
            elif tmp_int !='':
                if not self.num_info_hash.has_key(tmp_int):
                    self.t_show.insert('1.0', "请输入介于0~127之间的整数".decode('gbk').encode('utf8'))
                else:
                    self.t_show.insert('1.0', '字符:'.decode('gbk').encode('utf8') +'	' + self.num_info_hash[tmp_int][2] + '
    ')
                    self.t_show.insert('1.0', '十六进制:'.decode('gbk').encode('utf8') + '	' + self.num_info_hash[tmp_int][1] + '
    ')
                    self.t_show.insert('1.0', '八进制:'.decode('gbk').encode('utf8') + '	' + self.num_info_hash[tmp_int][0] + '
    ')
                    self.t_show.insert('1.0', '十进制:'.decode('gbk').encode('utf8') + '	' + tmp_int + '
    
    ')
                self.var_char.set('')
                self.var_int.set('')
            else:
                self.t_show.insert('1.0', '请选择或输入'.decode('gbk').encode('utf8'))
            
        def load_sys(self):
            f = file('asc')
            for line in f:
                chunk = line.strip().split('	')
                self.num_char[int(chunk[1])] = chunk[3]
                self.char_num[chunk[3]] = int(chunk[1])
                self.num_info_hash[chunk[1]] = [chunk[0], chunk[2], chunk[3]]
                self.char_info_hash[chunk[3]] = [chunk[0], chunk[1], chunk[2]]
    
            self.num_char =sorted(self.num_char.iteritems(), key = lambda asd:asd[0])
            self.char_num =sorted(self.char_num.iteritems(), key = lambda asd:asd[1])
    
    
    
    
    def main():
        d = show()
        mainloop()
    if __name__== "__main__":
        main()
    View Code

    文本

    00    0    00    nul
    01    1    01    soh
    02    2    02    stx
    03    3    03    etx
    04    4    04    eot
    05    5    05    enq
    06    6    06    ack
    07    7    07    bel
    10    8    08    bs
    11    9    09    ht
    12    10    0a    nl
    13    11    0b    vt
    14    12    0c    ff
    15    13    0d    er
    16    14    0e    so
    17    15    0f    si
    20    16    10    dle
    21    17    11    dc1
    22    18    12    dc2
    23    19    13    dc3
    24    20    14    dc4
    25    21    15    nak
    26    22    16    syn
    27    23    17    etb
    30    24    18    can
    31    25    19    em
    32    26    1a    sub
    33    27    1b    esc
    34    28    1c    fs
    35    29    1d    gs
    36    30    1e    re
    37    31    1f    us
    40    32    20    sp
    41    33    21    !
    42    34    22    "
    43    35    23    #
    44    36    24    $
    45    37    25    %
    46    38    26    &amp;
    47    39    27    `
    50    40    28    (
    51    41    29    )
    52    42    2a    *
    53    43    2b    +
    54    44    2c    ,
    55    45    2d    -
    56    46    2e    .
    57    47    2f    /
    60    48    30    0
    61    49    31    1
    62    50    32    2
    63    51    33    3
    64    52    34    4
    65    53    35    5
    66    54    36    6
    67    55    37    7
    70    56    38    8
    71    57    39    9
    72    58    3a    :
    73    59    3b    ;
    74    60    3c    &lt;
    75    61    3d    =
    76    62    3e    &gt;
    77    63    3f    ?
    100    64    40    @
    101    65    41    A
    102    66    42    B
    103    67    43    C
    104    68    44    D
    105    69    45    E
    106    70    46    F
    107    71    47    G
    110    72    48    H
    111    73    49    I
    112    74    4a    J
    113    75    4b    K
    114    76    4c    L
    115    77    4d    M
    116    78    4e    N
    117    79    4f    O
    120    80    50    P
    121    81    51    Q
    122    82    52    R
    123    83    53    S
    124    84    54    T
    125    85    55    U
    126    86    56    V
    127    87    57    W
    130    88    58    X
    131    89    59    Y
    132    90    5a    Z
    133    91    5b    [
    134    92    5c    
    135    93    5d    ]
    136    94    5e    ^
    137    95    5f    _
    140    96    60    '
    141    97    61    a
    142    98    62    b
    143    99    63    c
    144    100    64    d
    145    101    65    e
    146    102    66    f
    147    103    67    g
    150    104    68    h
    151    105    69    i
    152    106    6a    j
    153    107    6b    k
    154    108    6c    l
    155    109    6d    m
    156    110    6e    n
    157    111    6f    o
    160    112    70    p
    161    113    71    q
    162    114    72    r
    163    115    73    s
    164    116    74    t
    165    117    75    u
    166    118    76    v
    167    119    77    w
    170    120    78    x
    171    121    79    y
    172    122    7a    z
    173    123    7b    {
    174    124    7c    |
    175    125    7d    }
    176    126    7e    ~
    177    127    7f    del
    View Code

    参考资料

    通用控件属性:http://my.oschina.net/TyLucifer/blog/112961

    文件路径:http://blog.sina.com.cn/s/blog_76129c6f0101892q.html

  • 相关阅读:
    ps背景橡皮擦工具详解
    Application called By IE on Pseudo B/S Mode
    一种B/S模式下基于JAVA反射机制的可伸缩动态加载模块的解决方案
    Compile the latest Kernel(linux3.1rc4) On Ubuntu Plateform
    HttpService & WebService For Flex Develop
    国外的一个flex入门教学~[转]
    HQL略解
    How to build a Flex development platform based on Myeclipse8.6 & Flex4
    基于Pipe的PureMVC Flex框架的多核共享消息技术
    Ninject IOC<一>
  • 原文地址:https://www.cnblogs.com/freeliver54/p/5973057.html
Copyright © 2020-2023  润新知