Bootstrap

python使用Tkinter开发GUI交互界面

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 工作中做数据分析的代码,可以加上交互界面,抽象打包成小工具进行使用,提高工作效率,其他场景可做类似考虑;

;