前段时间做一个东西刚好接触到python的Tkinter,上网看了一些基本教程,这里做一个总结,并参考网上的一个实例
1.规划图
2.源码
# -*- coding:utf-8 -*-
from tkinter import *
from tkinter.filedialog import *
class Application:
num_info_hash = {}
char_info_hash = {}
char_num = {}
num_char = {}
char_hex={}
num_hex={}
def __init__(self):
self.root=Tk()
self.root.title("ASCII码查询")
Label(self.root, text="ASCII码查询", 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='字符', 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)
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="清除" ,command=self.clear, width=6, height=1,
font=('Arial', 10)).pack(side=LEFT)
Button(self.frm_MB, text="查询" ,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='十进制', 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)
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 clear(self):
self.var_char.set('')
self.var_int.set('')
self.t_show.delete('1.0', '10.0')
def char_inValue(self):
for key in self.num_char:
if (self.num_char[key] == self.var_char.get()):
return 1
return 0
def int_inValue(self):
for key in self.char_num:
if (str(self.char_num[key]) == self.var_int.get()):
return 1
return 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 self.char_inValue()==0:
self.t_show.insert('1.0', "您输入的字符不在128个字符之内")
else:
self.t_show.insert('1.0', "字符:"+'\t'+tmp_char)
self.t_show.insert('1.0', '十进制:' + '\t' + str(self.char_num[tmp_char]) + '\n')
self.t_show.insert('1.0', '十六进制:' + '\t' + str(self.char_hex[tmp_char]) + '\n')
self.var_char.set('')
self.var_int.set('')
elif tmp_int != '':
if self.int_inValue()==0:
self.t_show.insert('1.0', "请输入介于0~127之间的整数")
else:
self.t_show.insert('1.0', "十进制:" + '\t' + tmp_int)
self.t_show.insert('1.0', '字符:' + '\t' + self.num_char[int(tmp_int)] + '\n')
self.t_show.insert('1.0', '十六进制:' + '\t' + str(self.num_hex[int(tmp_int)]) + '\n')
self.var_char.set('')
self.var_int.set('')
else:
self.t_show.insert('1.0', '请选择或输入')
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 load_sys(self):
file = open(r'C:\Users\lenovo\Desktop\test.txt',encoding='utf-8')
f = file.read().split('\n')
for line in f:
chunk = line.split()
self.num_char[int(chunk[1])] = chunk[3]
self.num_hex[int(chunk[1])] = chunk[2]
self.char_num[chunk[3]] = int(chunk[1])
self.char_hex[chunk[3]]= chunk[2]
def main(self):
self.root.mainloop()
if __name__ == "__main__":
app = Application()
app.main()
3.所需知识:
1.TKinter布局之pack
https://www.cnblogs.com/kongzhagen/p/6144588.html
2.绑定事件
https://www.cnblogs.com/kongzhagen/p/6144232.html
3.frame部件
https://blog.csdn.net/felicityPY/article/details/79753221
http://51changxue.com/tkinter%E6%95%99%E7%A8%8B%E4%B9%8Bframe-%E6%A1%86%E6%9E%B6/
4.Scrollbar部件
https://blog.csdn.net/aa1049372051/article/details/51879511
5.Listbox部件
https://blog.csdn.net/LI_will/article/details/54173229
6.button部件
https://blog.csdn.net/Jin_Kwok/article/details/80038776
7.entry部件
https://blog.csdn.net/liuxu0703/article/details/60781107
8.label
https://blog.csdn.net/liuxu0703/article/details/54696630
9.其余参考博客
https://www.cnblogs.com/kaituorensheng/p/3287652.html