Skip to content

Commit d0b744a

Browse files
committed
Create main app
1 parent bdf38de commit d0b744a

File tree

2 files changed

+244
-0
lines changed

2 files changed

+244
-0
lines changed

app.py

Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
# -*- coding:utf-8 -*-
2+
import base64
3+
import hashlib
4+
import time
5+
from tkinter import Button, Entry, Frame, Label, LabelFrame, Text, Tk
6+
7+
from utils import set_window_center
8+
9+
__author__ = 'doudoudzj'
10+
__version__ = '0.0.1'
11+
__license__ = 'BSD'
12+
13+
14+
# 获取当前时间
15+
def get_current_time():
16+
current_time = time.localtime(time.time())
17+
current_time = time.strftime('%Y-%m-%d %H:%M:%S', current_time)
18+
return current_time
19+
20+
21+
class GUI():
22+
def __init__(self, master):
23+
self.master = master
24+
master.title('文本处理工具 V%s' % __version__)
25+
master.configure(relief='ridge', padx=5, pady=5)
26+
set_window_center(master, 700, 600)
27+
self.init_area_source()
28+
self.init_area_btns()
29+
self.init_area_target()
30+
self.init_area_log()
31+
32+
def init_area_source(self):
33+
# 待处理区
34+
frm_source = LabelFrame(self.master,
35+
text='待处理数据',
36+
padx=5,
37+
pady=5)
38+
frm_source.pack(fill='both', expand=True)
39+
40+
# 待处理文本
41+
self.init_data_Text = Text(frm_source,
42+
width=50,
43+
height=10,
44+
borderwidth=1,
45+
highlightcolor='#ddd',
46+
insertborderwidth=1)
47+
self.init_data_Text.pack(fill='both', expand=True)
48+
49+
def init_area_btns(self):
50+
# 中间:功能区
51+
frm_btns = Frame(self.master)
52+
frm_btns.pack(fill='x')
53+
54+
# 按钮 MD5 生成
55+
Button(frm_btns, text='MD5 生成', command=self.md5str).pack(side='left')
56+
# 按钮 Base64 编码
57+
Button(frm_btns, text='Base64 编码', command=self.b64encode).pack(side='left')
58+
# 按钮 Base64 解码
59+
Button(frm_btns, text='Base64 解码', command=self.b64decode).pack(side='left')
60+
# 按钮 Base32 编码
61+
Button(frm_btns, text='Base32 编码', command=self.b32encode).pack(side='left')
62+
# 按钮 Base32 解码
63+
Button(frm_btns, text='Base32 解码', command=self.b32decode).pack(side='left')
64+
65+
def init_area_target(self):
66+
# 输出区
67+
frm_target = LabelFrame(self.master,
68+
text='输出结果',
69+
padx=5,
70+
pady=5)
71+
frm_target.pack(fill='both', expand=True)
72+
73+
# 处理结果展示
74+
self.res_data = Text(frm_target,
75+
width=50,
76+
height=10,
77+
borderwidth=1,
78+
highlightcolor='#ddd')
79+
self.res_data.pack(fill='both', expand=True)
80+
81+
def init_area_log(self):
82+
# 日志区
83+
frm_log = LabelFrame(self.master,
84+
text='日志',
85+
padx=5,
86+
pady=5)
87+
frm_log.grid(row=1, column=0, columnspan=3, sticky='ew')
88+
frm_log.pack(fill='both', expand=True)
89+
90+
# 日志
91+
self.log_text = Text(frm_log,
92+
borderwidth=1,
93+
highlightcolor='#ddd')
94+
self.log_text.pack(fill='both', expand=True)
95+
96+
def md5str(self):
97+
# MD5 生成
98+
src = self.init_data_Text.get(1.0, 'end')
99+
if src is not None:
100+
try:
101+
md5 = hashlib.md5()
102+
md5.update(src.encode())
103+
md5_str = md5.hexdigest()
104+
# 清空
105+
self.res_data.delete(1.0, 'end')
106+
# 输出
107+
self.res_data.insert(1.0, md5_str)
108+
# 日志
109+
self.print_log('INFO:MD5 成功 %s' % md5_str)
110+
except:
111+
self.res_data.delete(1.0, 'end')
112+
self.res_data.insert(1.0, '字符串转MD5失败')
113+
else:
114+
self.print_log('ERROR:MD5 failed')
115+
116+
def b64encode(self):
117+
# Base64 编码
118+
src = self.init_data_Text.get(1.0, 'end')
119+
if src is not None:
120+
try:
121+
res = base64.b64encode(src.encode('ascii'))
122+
res = res.decode('ascii')
123+
# 清空
124+
self.res_data.delete(1.0, 'end')
125+
# 输出
126+
self.res_data.insert(1.0, res)
127+
self.print_log('INFO:Base64 success %s' % res)
128+
except:
129+
self.res_data.delete(1.0, 'end')
130+
self.res_data.insert(1.0, 'Base64 编码失败')
131+
else:
132+
self.print_log('ERROR:Base64 编码失败')
133+
134+
def b64decode(self):
135+
# Base64 解码
136+
src = self.init_data_Text.get(1.0, 'end')
137+
if src is not None:
138+
try:
139+
res = base64.b64decode(src.encode('ascii'))
140+
# 清空
141+
self.res_data.delete(1.0, 'end')
142+
# 输出
143+
self.res_data.insert(1.0, res)
144+
self.print_log('INFO:Base64 解码成功 %s' % res)
145+
except:
146+
self.res_data.delete(1.0, 'end')
147+
self.res_data.insert(1.0, 'Base64 解码失败')
148+
else:
149+
self.print_log('ERROR:Base64 解码失败')
150+
151+
def b32encode(self):
152+
# Base32 编码
153+
src = self.init_data_Text.get(1.0, 'end')
154+
if src is not None:
155+
try:
156+
res = base64.b32encode(src.encode('ascii'))
157+
res = res.decode('ascii')
158+
# 清空
159+
self.res_data.delete(1.0, 'end')
160+
# 输出
161+
self.res_data.insert(1.0, res)
162+
self.print_log('INFO:Base32 success %s' % res)
163+
except:
164+
self.res_data.delete(1.0, 'end')
165+
self.res_data.insert(1.0, 'Base32 编码失败')
166+
else:
167+
self.print_log('ERROR:Base32 编码失败')
168+
169+
def b32decode(self):
170+
# Base32 解码
171+
src = self.init_data_Text.get(1.0, 'end')
172+
if src is not None:
173+
try:
174+
res = base64.b32decode(src.encode('ascii'))
175+
# 清空
176+
self.res_data.delete(1.0, 'end')
177+
# 输出
178+
self.res_data.insert(1.0, res)
179+
self.print_log('INFO:Base32 解码成功 %s' % res)
180+
except:
181+
self.res_data.delete(1.0, 'end')
182+
self.res_data.insert(1.0, 'Base32 解码失败')
183+
else:
184+
self.print_log('ERROR:Base32 解码失败')
185+
186+
def print_log(self, msg):
187+
# 日志动态打印
188+
current_time = get_current_time()
189+
msg_str = str(current_time) + ' ' + str(msg) + '\n'
190+
self.log_text.insert('end', msg_str)
191+
192+
193+
if __name__ == '__main__':
194+
root = Tk()
195+
App = GUI(root)
196+
197+
root.mainloop()

utils.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# _*_ coding:utf-8 _*_
2+
# utils functions
3+
4+
5+
def set_window_center(window, width=None, height=None, minsize=True, resize=False):
6+
"""设置窗口宽高及居中"""
7+
# 获取窗口宽高
8+
if width == None or height == None:
9+
# 宽高为 None 时取窗口自身大小
10+
window.update_idletasks() # 更新
11+
window.withdraw() # 隐藏重绘
12+
# window.update() # 获取窗口宽高之前需要先刷新窗口
13+
if width is None:
14+
width = window.winfo_width()
15+
if height is None:
16+
height = window.winfo_height()
17+
18+
# 获取屏幕宽高
19+
w_s = window.winfo_screenwidth()
20+
h_s = window.winfo_screenheight()
21+
22+
# 计算 x, y 位置
23+
x_co = (w_s - width) / 2
24+
y_co = (h_s - height) / 2
25+
26+
# 设置窗口宽高和居中定位
27+
window.geometry("%dx%d+%d+%d" % (width, height, x_co, y_co))
28+
window.deiconify() # 显示
29+
# 是否设置窗口最小尺寸
30+
if minsize:
31+
window.minsize(width, height)
32+
# 是否可调整大小
33+
if resize:
34+
window.resizable(True, True)
35+
else:
36+
window.resizable(False, False)
37+
38+
39+
def get_screen_size(window):
40+
"""获取屏幕 宽、高"""
41+
return window.winfo_screenwidth(), window.winfo_screenheight()
42+
43+
44+
def get_window_size(window):
45+
"""获取窗口 宽、高"""
46+
window.update()
47+
return window.winfo_width(), window.winfo_height()

0 commit comments

Comments
 (0)