用的python3.11
情况1:
from 查询全部待打印标签 import get_all_labels
def click_button(print_num):
global text
# 问题在这里,调用了外部get_all_labels函数,在tkinter窗口打开一段时间后,再点击这个按钮,他不会运行这个函数了,直接快递的就return
trade_no_num = get_all_labels(print_num=print_num)
text.insert(tk.END, f'本次打印了{trade_no_num}笔订单标签 \t{datetime.now().strftime("%Y-%m-%d %H:%M:%S")}\n')
def thread_it(func, *args):
t = threading.Thread(target=func, args=args)
t.Daemon = True
t.start()
Print_all_Button = tk.Button(root, text='全部标签打印', bg='#7CCD7C', width=20, height=5,
command=lambda: thread_it(click_button, 2))
Print_all_Button.pack()
text = tk.Text(root)
text.pack()
root.mainloop()
运行的结果:
情况2:
import hashlib
import urllib.parse
import time
from datetime import datetime, timedelta
import jsonpath
import openpyxl
import requests
import win32com.client
def print_label(trade_no, print_num):
url_path = 'erp/opentrade/list/trades'
query_time = get_time(back_6_day.year, back_6_day.month, back_6_day.day, tomorow.year, tomorow.month,
tomorow.day)
# print(query_time)
data = {
'_app': appkey,
'_t': _t,
# 'bill_code': 'XD220808000014',
"pay_time": query_time[0],
'end_time': query_time[1],
'limit': '200',
'page': '1',
'trade_status': '1,2,3,4',
'is_split': '0'
}
_sign = hash_md5(joint(data, secretkey))
data['_sign'] = _sign
try:
res = requests.post(url + url_path, data=data)
# print(res.json())
if res.status_code == 200:
# print('post请求结果:', res.json())
# 提取数据
data = jsonpath.jsonpath(res.json(), '$..data')
# print(data)
data_list = []
for i in data[0]:
single_list = dict.fromkeys(
['平台', '店铺名', '系统单号', '平台订单状态', '系统订单类型', '买家ID', '省', '市', '区',
'订单明细',
'快递名称', '快递单号', '是否组合商品', '是否拆分订单', '是否售后订单', '异常类型名称', '包裹重量',
'创建时间'])
single_list['平台'] = jsonpath.jsonpath(i, '$..source_platform')
single_list['店铺名'] = jsonpath.jsonpath(i, '$..shop_nick')
single_list['系统单号'] = jsonpath.jsonpath(i, '$..trade_no')
single_list['平台订单状态'] = jsonpath.jsonpath(i, '$..oln_status')
single_list['系统订单类型'] = jsonpath.jsonpath(i, '$..trade_type')
single_list['买家ID'] = jsonpath.jsonpath(i, '$..buyer')
# ================================= 通过系统单号获取需要打印标签的组合商品名称 =================================#
query_Trade_No = trade_no
res = {'msg': '', 'id': ''}
# 定义组合名称列表
package_name = []
a = 0
for i in data_list:
if query_Trade_No in i.get('系统单号')[0]:
a += 1 # 判断系统单号是否存在
orders = i.get('订单明细')[0]
# print(orders)
for order in orders:
item_name = order.get('item_name') # 商品名称
sku_code = order.get('sku_code') # 规格编码
size = order.get('size') # 商品数量
price = order.get('price') # 单价(商品标价)
is_package = order.get('is_package') # 是否组合商品
receivable = order.get('receivable') # 应收(原价)
order_total_discount = order.get('order_total_discount') # 商品总优惠=原价-销售金额
payment = order.get('payment') # 应收款
tp_tid = order.get('tp_tid') # 线上单号
oln_item_id = order.get('oln_item_id') # 线上商品id
if not sku_code:
sku_code = '0'
if not oln_sku_id:
oln_sku_id = '0'
if 'A0' in sku_code or 'A0' in oln_sku_id:
if oln_sku_name:
res0 = oln_sku_name.strip('颜色分类:')
res1 = res0.strip('尺寸:')
res2 = res1.strip('5套起拍;')
res3 = res2.strip(';')
res4 = res3.strip('规格:')
package_name.append(res4)
elif item_name:
res0 = item_name.strip('颜色分类:')
res1 = res0.strip('尺寸:')
res2 = res1.strip('5套起拍;')
res3 = res2.strip(';')
res4 = res3.strip('规格:')
package_name.append(res4)
else:
res['msg'] = '该买家没有组合商品!'
break
if not package_name:
if a > 0:
res['msg'] = '该买家没有组合商品!'
else:
res['msg'] = '系统单号不正确!'
# print('通过系统单号查找的组合名称:', package_name)
else:
res['msg'] = '打印完成!'
for m in package_name:
# 读取excel文件,获取workbook对象
wb = openpyxl.load_workbook('E:/吊牌打印.xlsm', keep_vba=True)
# 通过名称获取工作薄
sheet = wb.active
# 插入一行数据
# sheet.append(["Hello", "World"])
# 具体修改哪一行那一列的数据
# 注意:cell的参数row、column必须是大于等于1的。
# sheet.cell(1, 5).value = '菁娇微景观'
sheet['B3'] = m
sheet['B2'] = len(package_name)
wb.save('E:/吊牌打印.xlsm')
wb.close()
xl = win32com.client.Dispatch("Excel.Application")
xl.Workbooks.Open(Filename=r"E:\吊牌打印.xlsm")
xl.Application.DisplayAlerts = False
for count in range(int(print_num)):
xl.Application.Run("打印标签")
# xl.Application.Save()
# xl.Application.DisplayAlerts = True
xl.Application.Quit()
time.sleep(0.3)
except:
pass
return res
if __name__ == '__main__':
while True:
trade_no_iput = input('请输入系统单号:')
print_label(trade_no=trade_no_iput, print_num=2)
出错的问题:运行这个py文件,他while True 不是一直在运行着呢?一开始执行代码可以的,然后过上十来分钟,同样的可以出现结果(结果和最后一次的结果一样),但是实际上没有执行代码,快速的就return了,正常执行代码要十来秒的,他这么快速的返回结果肯定是不正常的,而且后台看打印结果,确实没有执行呢