之前四篇文章论证了利用二维码传输文件的可行性,本章使用tkinter开发【动态二维码文件发送端】,发送端具备文件选择、开始发送文件、停止发送文件以及显示发送状态的功能,程序界面下:
这里下载源码运行↓↓↓
使用tkinter开发动态二维码文件发送端-图像识别文档类资源-CSDN下载
目录
经过简单分析,要开发该程序,需要完成以下五个步骤,1)程序的界面设计;2)选择文件功能开发;3)文件拆分成二维码功能开发;4)发送和停止线程开发;5)发送状态更新功能开发。接一下一个一个步骤进行研究。
一、程序的界面设计
程序界面内容不多,只需用到图片显示组件、文本组件、按钮组件,然后使用tkinter的网格布局.grid(row=,column=,......)把组件放置在对应的位置即可。由于文件路径、图片、状态会随着用户的操作发生变化,这里把文件路径变量_label_filepath、图片对象变量_label_dt、进度和状态变量_label_progress_text、_label_state_text设置为程序的全局变量,方便后续开启线程调用全局global变量,更新上述组件。
主要代码如下:
from tkinter import Tk, Label, Button, StringVar
from PIL import Image, ImageTk
# 显示图片组件
_label_dt = None
# 显示文件路径组件,_label_filepath_text为文件路径
_label_filepath_text = None
# 显示发送状态组件,_label_progress_text为进度,_label_state_text为状态
_label_progress_text = None
_label_state_text = None
def open_window():
# 创建窗口
root = Tk()
# 设置窗口的标题
root.title("动态二维码文件发送端")
# 创建图片组件,None.png为未启动发送时的默认图片
_pil_image = Image.open('None.png')
# 缩放图片
_w, _h = _pil_image.size
_pil_image_resized = resize(_w, _h, 300, 300, _pil_image)
_tk_image = ImageTk.PhotoImage(_pil_image_resized)
# 创建图片组件,放置在root中
global _label_dt
_label_dt = Label(root, image=_tk_image, width=300, height=300)
_label_dt.grid(row=0, columnspan=4, column=0)
_button = Button(root, text="选择待发送文件......", command=open_file)
_button.grid(row=1, column=0,columnspan=2)
# 创建label可变文本,用于动态更新选中的文件路径
global _label_filepath_text
_label_filepath_text = StringVar()
_label_filepath = Label(root, textvariable=_label_filepath_text)
_label_filepath.grid(row=1,column=2, columnspan=2)
# 创新开始、停止按钮
_button_start = Button(root, text="开始发送", command=start_send_file)
_button_stop = Butt