tkinter
由于需要做一些小脚本去处理数据,每次自己跑不过来,就考虑做成exe文件,让他们自己处理自己的数据,利人利己,做exe文件就势必会考虑一些交互,由于不太考虑美观等因素,只是跑个数据,所以选择了自带的模块tkinter,方便、简单。
直接上代码,中间穿插解释
import time
import tkinter as tk # 某个版本之前首字母是大写的,
from PIL import ImageTk,Image # 用于获取图片,增加背景
# 最基本的两个东西
win = tk.Tk() # 初始化窗口环境
win.mainloop() # 窗口循环
# 然后就是给窗口添加必要的东西,多的不懂,我只说说我用的最基本的
win = tk.Tk()
# 以下全是增加各种东西
win.title("这个是标题") # 这是程序显示的标题
image2 = Image.open('bk.jpg') # 自己的图片哦
background_image = ImageTk.PhotoImage(image2)
w = background_image.width()
h = background_image.height()
"""
这个是配置窗口的大小,具体格式形如"400x300+200+300",其中前两个是窗口的长和宽,
后两个是窗口出现在屏幕的位置。我这里因为要配置背景,就直接获取的背景的大小做窗口
的长宽。
"""
win.geometry('%dx%d+500+300' % (w, h))
"""
设置窗口的背景,这里采用的取巧的方法,以图片作为标签,放置在整个窗口界面,
.place()的参数解释:x,y是位置坐标,relwidth,relheight是真实的大小,1表示全部,0.5代表一半
"""
background_label = tk.Label(win, image=background_image)
background_label.place(x=0, y=0, relwidth=1, relheight=1)
"""
这是正常的标签操作,其中参数text是显示文字,bg是背景色
"""
l1 = tk.Label(win, text="请输入补货地区 如:加拿大", bg="white")
l1.place(x=280, y=20, relwidth=0.2, relheight=0.08)
"""
Entry来定义输入框,用以获取用户输入的内容,至于放置方法同上
"""
e1 = tk.Entry(win)
e1.place(x=280, y=60, relwidth=0.2, relheight=0.08)
"""
Button来定义按钮,至于放置方法同上
这里需要说明的是command参数,它后面是一个函数,用于点击按钮之后执行一些操作,当然要先定义后使用
"""
## 设置进度条
"""
添加这个的主要目的就是让操作者知道是否数据已经处理完
"""
canvas = tk.Canvas(win, bg="white")
canvas.place(x=105, y=350, relwidth=0.6, relheight=0.1)
"""
这个就是定义的按钮执行操作,也就是这个exe最主要的操作
"""
def progress():
# 填充进度条
## 这个是获取之前两个输入框的内容
country = e1.get()
Week = int(e2.get())
# 数据操作的具体
stock_path = get_file_path(".\\数据\\管理亚马逊库存表\\")
order_path = get_file_path(".\\数据\\所有订单\\")
# 转换所有数据的格式为UTF-8
transfome_func(order_path)
transfome_func(stock_path)
all_order = load_all_order(order_path)
all_stock = load_all_stock(stock_path)
Replenishment_volume = deal_data(all_order, all_stock, country, Week)
# 判断是否处理完成,完成则给出进度条
if ~Replenishment_volume.empty:
fill_line = canvas.create_rectangle(1.5, 1.5, 0, 23, width=0, fill="green")
x = 500 # 未知变量,可更改
n = 465 / x # 465是矩形填充满的次数
for i in range(x):
n = n + 465 / x
canvas.coords(fill_line, (0, 0, n, 60))
win.update()
time.sleep(0.005) # 控制进度条流动的速度
# 清空进度条
fill_line = canvas.create_rectangle(1.5, 1.5, 0, 23, width=0, fill="white")
x = 500 # 未知变量,可更改
n = 465 / x # 465是矩形填充满的次数
for t in range(x):
n = n + 465 / x
# 以矩形的长度作为变量值更新
canvas.coords(fill_line, (0, 0, n, 60))
win.update()
time.sleep(3) # 时间为0,即飞速清空进度条
b1 = tk.Button(win, text="开始运行", command=progress)
b1.place(x=310, y=265, relwidth=0.1, relheight=0.08)
win.mainloop()
打包
打包前面记录过一次,方法和一些问题也都是,有问题的可以参考之前的文章
配置虚拟环境、打包Python文件成exe文件