1. 程式人生 > >pyhon Tkinter模塊學習(二)

pyhon Tkinter模塊學習(二)

#### sina lec com 插入 style res 相關 效果

pyhon之Tkinter實例化學習

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\n‘)
t.insert(END, ‘hello000000\n‘)
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\n")
    
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) + \t + self.char_info_hash[tmp_char][2] + \n)
                self.t_show.insert(1.0, 十進制:.decode(gbk).encode(utf8) +\t + self.char_info_hash[tmp_char][1] + \n)
                self.t_show.insert(1.0, 八進制:.decode(gbk).encode(utf8) + \t + self.char_info_hash[tmp_char][0] + \n)
                self.t_show.insert(1.0, 字符:.decode(gbk).encode(utf8) +\t + tmp_char + \n\n)
            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) +\t + self.num_info_hash[tmp_int][2] + \n)
                self.t_show.insert(1.0, 十六進制:.decode(gbk).encode(utf8) + \t + self.num_info_hash[tmp_int][1] + \n)
                self.t_show.insert(1.0, 八進制:.decode(gbk).encode(utf8) + \t + self.num_info_hash[tmp_int][0] + \n)
                self.t_show.insert(1.0, 十進制:.decode(gbk).encode(utf8) + \t + tmp_int + \n\n)
            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(\t)
            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

轉自:https://www.cnblogs.com/kaituorensheng/p/3287652.html

pyhon Tkinter模塊學習(二)