Tkinter实例学习

前段时间做一个东西刚好接触到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

猜你喜欢

转载自blog.csdn.net/qq_38211852/article/details/80799158