python使用Tkinter开发GUI交互界面
前言
python语言使用较为灵活,且有丰富的库函数支撑,在解决某些业务问题上有很大优势,python应用领域非常丰富,例如图像处理、数据分析等,但基本都是基于shell脚本形式去用的,这样即使功能完成,但后续使用门槛还是比较高,所以使用python写交互界面就出现了。它可以将日常工作中写的小代码工具以界面形式展示,并打包成exe,提供给其他用户常态化使用。好处就是精炼短小,不用像web应用那样需要各种环境部署才能使用。
基本结构
import tkinter as tk
#定义窗口,设置标题
root = tk.Tk()
root.title("Tkinter Example")
#定义内容,文本标签
label = tk.Label(root, text="Hello, Tkinter!")
# 控制标签显示位置,类似html网页的布局
label.pack()
# 保持窗口运行
root.mainloop()
其中,label.pack()也可以换成label.grid()
# label标签在第一行第一列居左显示 类似html的table标签布局
label.grid(row=1, column=1, sticky='W')
其中,'n'
(北)、's'
(南)、'e'
(东)、'w'
(西)对应 上 下 右 左
这里记住一句话,上北下南 左西右东 即可
也可以组合,例如 nw 控件同时靠近顶部和左侧
窗口控件内容动态更新
上传图片,并回显
def show_image():
global file_path
file_path = filedialog.askopenfilename()
if file_path:
global photo # 声明全局变量
image = Image.open(file_path)
image = image.resize((200, 150))# 限制图片尺寸
photo = ImageTk.PhotoImage(image) # 将图像对象赋值给全局变量
pic_label.config(image=photo) # 更新标签的图像
pic_label.image = photo # 保持对图像对象的引用
root = tk.Tk()
# 定义窗口尺寸
root.geometry("1000x900+100+50")
# 定义选择图片按钮 居左显示
upload_button = tk.Button(root, text="选择图片", command=show_image)
upload_button.grid(row=1, column=1, sticky='W')
# 定义上传图片显示的容器,并定义宽高 居左
pic_label = tk.Label(root, width=200, height=150)
pic_label.grid(row=2, column=1, sticky='W')
root.mainloop()
其中,可以使用 pic_label.config()对标签属性进行更新修改,达到动态更新内容的目的
显示绘制图像
# 绘制图片的灰度直方图
def draw_hist():
img = cv2.imread(file_path)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
hist = cv2.calcHist([img_gray], [0], None, [256], [0, 255]) # 统计直方图数据
fig = plt.figure(figsize=(8, 6), dpi=100)
plt.subplot(121)
plt.imshow(img_gray, cmap='gray')
# plt.axis('off')
plt.title('灰度图')
plt.subplot(122)
plt.plot(hist, label='gray')
plt.title('灰度直方图')
plt.rcParams['font.sans-serif'] = ['FangSong']
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().grid(row=2, column=1, sticky='W')
root = tk.Tk()
# 定义窗口尺寸
root.geometry("1000x900+100+50")
# 定义绘制直方图按钮
draw_button = tk.Button(root, text="绘制直方图", command=draw_hist)
draw_button.grid(row=1, column=1, sticky='W')
root.mainloop()
打包成exe
在完成功能调试后,即可将代码打包成exe 程序
# 安装打包工具
pip install pyinstaller
# 执行打包命令
pyinstaller --onefile xxx.py
执行完成即可生成exe可执行文件,这样就可以在非python环境使用小工具了
经验总结
1 工作中做数据分析的代码,可以加上交互界面,抽象打包成小工具进行使用,提高工作效率,其他场景可做类似考虑;