Tkinter模塊("Tk 接口")是Python的標準Tk GUI工具包的接口,位Python的內置模塊,直接import tkinter便可使用。html
做爲實踐, 用Tkinter作了個ascii碼轉化查詢表
web
界面編程
功能ide
規劃圖函數
首先看怎麼產生第一個窗口工具
from Tkinter import * #引用Tk模塊 root = Tk() #初始化Tk() root.mainloop() #進入消息循環
幾個經常使用屬性oop
# -*- coding: cp936 -*- from Tkinter import * root = Tk() root.title("hello world") root.geometry('200x100') #是x 不是* root.resizable(width=False, height=True) #寬不可變, 高可變,默認爲True root.mainloop()
介紹如下幾個控件的用法佈局
說明每一個控件最後要加上pack().不然控件是沒法顯示的.字體
3.1 Labelspa
說明
標籤
用法
Label(根對象, [屬性列表])
屬性
如下介紹的控件差很少都有這幾個屬性, 更詳細的屬性查看參考網頁
舉例
# -*- 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
說明
建立單行文本框
用法
舉例
# -*- 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能夠是行號,或者特殊標識,例如
舉例
# -*- 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
說明
列表控件,能夠含有一個或多個文本想,可單選也可多選
用法
屬性
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()
效果
代碼
# -*- 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()
文本
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 & 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 < 75 61 3d = 76 62 3e > 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
參考資料
通用控件屬性:http://my.oschina.net/TyLucifer/blog/112961
文件路徑:http://blog.sina.com.cn/s/blog_76129c6f0101892q.html