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 & 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 復制代碼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模塊學習(二)