python使用tkinter写带界面的工具

python一般用来写纯脚本的居多,但也可以做有视图的产品出来,例如做网页和客户端工具。做成工具的好处是,让不懂代码的人也能使用,不需要去修改代码里面的参数,如果使用次数频繁,甚至比纯脚本跟节约时间;最大的好处是打包后可以运行在任何没有安装脚本中第python三方包的电脑上,也可以运行在任何没有安装python的电脑上。下面上我很久之前的tkinter做的第一个测试工具的源代码。

此部分是tkinter代码,直接运行代码,就可以弹出界面。

 

  1 # -*- coding: utf-8 -*-
  2 from Tkinter import *
  3 from PIL import Image, ImageTk
  4 import urllib
  5 import urllib2
  6 #import http.cookiejar
  7 import base64
  8 import cookielib,time,sys
  9 #import mysql.connector
 10 import MySQLdb
 11 
 12 
 13 
 14 
 15 class post():                                          ##########这种cookie方式略微复杂些,脚本写的太早了,是urllib2,用requests会简化很多
 16     def __init__(self,values):
 17         self.values=values
 18     def qinqiu(self):
 19         #从文件中获取cookie并访问
 20         cookie = cookielib.MozillaCookieJar()
 21         #从文件中读取cookie内容到变量
 22         cookie.load('cookie.txt', ignore_discard=True, ignore_expires=True)
 23         #利用urllib2的build_opener方法创建一个opener
 24         #print 'saddsafsdafdsf',cookie
 25         opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
 26 
 27         url ="http://www.xxxx.cn/test/yuanzhao/controls/api.php"
 28 
 29         data = base64.b64encode(self.values)              #######视情况而定,一般公司的接口参数并不需要base64进行编码
 30         #print data    #
 31         req = urllib2.Request(url, data)
 32         response = opener.open(req)
 33         the_page = response.read()
 34         print the_page
 35         return the_page
 36         
 37 
 38 class select():                                                              ####可以不用mysql,直接请求特定的某些接口,取出我们需要的返回值也可以。
 39     def __init__(self,sql):
 40         self.sql=sql
 41     def chaxun(self):
 42         conn=MySQLdb.connect(host='112.xx.xx.xx',user='root',passwd='*************',db='ld_logistic_sys_******',port=3307)
 43         cur=conn.cursor()
 44         try:
 45             #sql='select settlement_ID,payableAccount from bus_waybill,bus_waybill_fee where bus_waybill.waybillCode=bus_waybill_fee.waybillCode and bus_waybill.waybillCode='+str(yundanhao)
 46             sql=self.sql
 47             cur.execute(sql)
 48             data = cur.fetchall()
 49         except:
 50             print u'没查询出来'
 51         
 52 
 53         #print data
 54         cur.close()
 55         conn.close()
 56         return data
 57         
 58 
 59 def tanchu(str1,height):                                 #####从tkinter主界面弹出
 60     top = Toplevel()
 61     h=int(height)
 62     top.title('提示')
 63     Label(top, text=str1,fg='yellow',bg='red').pack()
 64     top.geometry('400x'+str(h)+'+700+500')
 65     return
 66 
 67 #tanchu('hello',500)
 68 
 69 
 70 
 71 
 72 def fun2():
 73    
 74     ydgs1=ydgs.get()
 75     if ydgs1=='':
 76         print u'请填写运单个数'
 77         tanchu(u'请填写运单个数',100)
 78         return
 79     print "创建%s个运单"%(ydgs1)
 80 
 81     if ydnx.get()==u'货物托运凭证':
 82         ydnx1=0
 83     elif ydnx.get()==u'吊装受理开单':
 84         ydnx1=1
 85     else:
 86         ydnx1=2
 87     #print ydnx1
 88 
 89 
 90     if jsfs.get()==u'现付':
 91         jsfs1=0
 92     elif jsfs.get()==u'提付':
 93         jsfs1=1
 94     elif  jsfs.get()==u'回单付':
 95         jsfs1=2
 96     else:
 97         jsfs1=3
 98     #print jsfs1
 99 
100     yundanneixin=ydnx1
101     jiesuanfangshi=jsfs1
102     yundangeshu=ydgs1
103     fhkhid1=fhkhid.get()
104     str1='创建的运单'
105     for i in range (int(yundangeshu)):
106     #创建运单
107         
108         values = '{"opFrom":"1","userName":"testy","psd_v":"0","waybillType":"'+str(yundanneixin)+'","originatingStation":"25","destinationStation":"27","goodsNO":"名称很长的长货号a1",\
109         "deliveClientName":"'+str(fhkhid1)+'","deliveClientPhone":"13156983698","deliveClientAdd":"财务发货客户1的详细地址财务发货客户1的详细地址","receiptClientName":"101",\
110         "receiptClientPhone":"13698563214","receiptClientAdd":"财务收货客户2的详细地址财务收货客户2的详细地址财务收货客户2的详细地址","settleAccountType":"'+str(jiesuanfangshi)+'","receivable":40,\
111         "buisnessList":[{"buisnessType":"业务类型1业务类型1","articleName":"长品名长品名长品名长","articleNO":"长品号长品号长品号长","count":"1","weight":"1.11","volume":"1.12",\
112         "pack":"长包装1长包装1长包","freight":"1.13","handlingCharges":"1.14","transportationCharges":"1.15","delayUnloadCharges":"2","advanceCharges":"3",\
113         "other":"5.22","tax":"12.32%","paymentDay":"一年165天12个月"},{"buisnessType":"业务类型2业务类型2","articleName":"长2名长品名长品名长","articleNO":"长2号长品号长2号长",\
114         "count":"2","weight":"11","volume":"","pack":"","freight":"5","handlingCharges":"",\
115         "transportationCharges":"6","delayUnloadCharges":"","advanceCharges":"","other":"",\
116         "tax":"","paymentDay":"一年265天12个月"},{"buisnessType":"","articleName":"","articleNO":"品号3",\
117         "count":"","weight":"","volume":"","pack":"","freight":"",\
118         "handlingCharges":"","transportationCharges":"","delayUnloadCharges":"","advanceCharges":"","other":"","tax":"","paymentDay":""},\
119         {"buisnessType":"业务类型4业务类型4","articleName":"","articleNO":"","count":"","weight":"","volume":"","pack":"长包装4长包装4长包",\
120         "freight":"7.36","handlingCharges":"","transportationCharges":"8","delayUnloadCharges":"","advanceCharges":"","other":"","tax":"",\
121         "paymentDay":""}],"receipted":10,"settler":"18","receiptStatus":0,"performance":"","remark":"运单的备注中新网10月13日电 据法新社13日报道\
122         ,联合国大会正式任","method":"new_waybill"}'
123         
124         cjyd=post(values)
125         the_page=cjyd.qinqiu()
126         str1=str1+the_page
127         
128     #print str1
129     tanchu(str1,400)
130 
131 
132 ########################################################调度函数####################################################
133 def diaodu():
134     if ddjsfs.get()==u'现付':
135         jiesuanfangshi=0
136     elif ddjsfs.get()==u'回单付':
137         jiesuanfangshi=2
138     else:
139         jiesuanfangshi=3
140 
141     #print jiesuanfangshi
142 
143     global ydksid
144     global ydjsid
145     if   ydksid.get()=='' :
146         tanchu(u'请填写运单结开始和结束id',100)
147         print u'请填写运单结开始和结束id'
148         
149         return
150     if   ydjsid.get()=='' :
151         print u'请填写运单开始和结束id'
152         
153         top = Toplevel()
154         top.title('提示')
155         Label(top, text='请填写运单开始和结束id!').pack()
156         top.geometry('400x300+700+500')
157         return
158     
159     ydksid1=int(ydksid.get())
160     ydjsid1=int(ydjsid.get())+1
161 
162   
163     driverid=jsyid.get()
164     gongyinshangid=gysid.get()
165     vehicleid=cphid.get()
166 
167     
168     
169     print u'调度'
170     for i in range(ydksid1,ydjsid1):
171     
172         if jiesuanfangshi==0:                 ####运单的结算方式为0是现付,请求参数会有少量不同
173             
174         
175         
176         
177             values='{"opFrom":"1","userName":"ydf","psd_v":"0","supplierCompany":"'+str(gongyinshangid)+'","predictArriveDate":"2016-10-20","driverID":"'+str(driverid)+'","vehicleID":"'+str(vehicleid)+'","dispatchNO":\
178             "调度号很长很很长的aaaa111111","dispatchCharges":"5","packCharges":0,"handlingCharges":"2.22","forkliftCharges":0,"otherCharges":"4.44","settleType":"'+str(jiesuanfangshi)+'","settleStatus":\
179             "0","dispatchTotalCharges":"11.66","paidDispatchTotalCharges":"11.66","receivableKickback":"9.99","paidKickback":"9.99","settler":"32",\
180             "remark":"http://www.xxxx.cn/test/yuanzhao/admin/view/index.html#/dispatch/dispatchlistdispatch/522","waybillIDList":["'+str(i)+'"],"method":"add_dispatch"}'
181         else:
182             values='{"opFrom":"1","userName":"ydf","psd_v":"0","supplierCompany":"'+str(gongyinshangid)+'","predictArriveDate":"2016-10-20","driverID":"'+str(driverid)+'","vehicleID":"'+str(vehicleid)+'","dispatchNO":\
183             "调度号很长很很长的aaaa111111","dispatchCharges":"5","packCharges":0,"handlingCharges":"2.22","forkliftCharges":0,"otherCharges":"4.44","settleType":"'+str(jiesuanfangshi)+'","settleStatus":\
184             "0","dispatchTotalCharges":"11.66","paidDispatchTotalCharges":"6.66","receivableKickback":"9.99","paidKickback":"8","settler":"32",\
185             "remark":"http://www.xxxx.cn/test/yuanzhao/admin/view/index.html#/dispatch/dispatchlistdispatch/522","waybillIDList":["'+str(i)+'"],"method":"add_dispatch"}'
186       
187 
188         #print values
189         dd=post(values)
190         the_page=dd.qinqiu()
191 
192     if '{"errorCode":"0","errorMsg":"","dispatchID":' in the_page:
193         tanchu(u'调度成功',100)
194     
195     
196         
197 
198 
199 ##################################根据运单id查询运单号函数############################################################
200 def idchayundan():
201     global dyydh
202     id=cxdydid.get()
203     if id=='':
204         tanchu(u'请输入运单id',100)
205         return
206     sql='select waybillCode from bus_waybill where ID='+str(id)
207     
208     idcyd=select(sql)
209     the_page=idcyd.chaxun()
210 
211     print the_page
212 
213     dyydh1=the_page[0][0]
214     dyydhe.set(dyydh1)
215 
216 
217    
218         
219 
220 def fahuo():
221     yundanhao=fhydh.get()
222     devicename=imei.get()
223     if yundanhao=='':
224         tanchu(u'请填写运单号',100)
225         print (u'请填写运单号')
226         return
227     
228     print u'发货'
229    
230     values = '{"deviceName":"'+str(devicename)+'","list":[{"waybillNO":"'+str(yundanhao)+'"}],"method":"deliver","opFrom":"0","psd_v":"0","userName":"testy"}'
231     fh=post(values)
232     the_page=fh.qinqiu()
233     if '"errorCode":"0"' in the_page:
234         tanchu(u'发货成功',100)
235 
236 def faduanxin():
237     yundanhao=fdxydh.get()
238     if yundanhao=='':
239         tanchu(u'请输入运单号',100)
240         return
241     print u'发短信'
242     
243     values = '{"waybillNO":"'+str(yundanhao)+'","method":"send_msg","opFrom":"0","psd_v":"0","userName":"testy"}'           ####调用此接口会发送一条短信给收货人
244     fdx=post(values)
245     fdx.qinqiu()
246 
247 def shouhuo():
248     yundanhao=shydh.get()
249     if yundanhao=='':
250         tanchu(u'请输入运单号',100)
251         return 
252     sql='select settlement_ID,payableAccount from bus_waybill,bus_waybill_fee where bus_waybill.waybillCode=bus_waybill_fee.waybillCode and bus_waybill.waybillCode='+str(yundanhao)
253     shsql=select(sql)
254     data=shsql.chaxun()
255     
256     #print data
257     
258     jsfs=data[0][0]
259     ispaid=0
260     if jsfs==0:
261         ispaid=1
262     elif jsfs==1:
263         ispaid=1
264     elif jsfs==2:
265         ispaid=0
266     elif jsfs==3:
267         ispaid=0
268     #print ispaid
269 
270     rece=data[0][1]
271     #print rece
272        
273    
274    
275 
276     print u'收货'
277     
278     values = '{"consignee":"呃呃","imgUrl":"http://www.xxxx.cn/test/yuanzhao/controls/image/IMG_20160621_163048.jpg",\
279     "isPaid":"'+str(ispaid)+'","receivableMoney":"'+str(rece)+'","waybillNO":"'+str(yundanhao)+'","method":"get_receive_detail","opFrom":"0","psd_v":"0","userName":"testy"}'
280     
281     shpost=post(values)
282     the_page=shpost.qinqiu()
283     
284     if '"errorCode":"0"' in the_page:
285         
286         tanchu('收货成功',100)
287 
288 ######################################查询运单状态函数********************************'''
289 def chaxunyundanzt():
290     global ydzte
291     global cxydh
292     
293     cxydh1=cxydh.get()
294     if cxydh1=='':
295         print u'请输入运单号'
296         
297         tanchu(u'请输入运单号',100)
298         return
299         
300      
301     #print cxydh1
302     sql='select status,ID from bus_waybill where waybillCode='+str(cxydh1)
303     cxydh2=select(sql)
304     data=cxydh2.chaxun()
305     
306         
307     print data
308 
309     data3=data[0][1]
310     print data3,'*********'
311     
312         
313     data1=''
314     
315     if data[0][0]==1:
316         data1=u'待调度'
317     elif data[0][0]==2:
318         data1=u'待发货'
319     elif data[0][0]==3:
320         data1=u'在途'
321     elif data[0][0]==4:
322         data1=u'待签收'
323     elif data[0][0]==5:
324         data1=u'待结算'
325     elif data[0][0]==6:
326         data1=u'完成'
327    
328     
329     ydzte.set(data1)
330     yddid.set(data3)
331    
332     
333 '''***********************************************tkinter**********************************************************************************************************************************************************************************************'''    
334 root = Tk()
335 root.geometry('580x680+200+100')
336 root.resizable(width = False, height = False) 
337 root.title("远兆")
338 root.iconbitmap('yuanzhao.ico')
339 
340 #创建运单            ***********************************************创建运单*********************************************************************    
341 lb=Label(root,text = u'创建运单',fg = 'purple',bg = 'green',width=77)
342 lb.pack(side = LEFT,padx = 0,pady = 0)
343 lb.place(x=20,y=5)
344 
345 
346 lb=Label(root,text = u'创建',fg = 'red')
347 lb.pack()
348 lb.place(x=20,y=40)
349 
350 e = StringVar()                       #运单个数
351 ydgs = Entry(root,width = 5,textvariable = e,bg='#FFD700')
352 ydgs.pack()
353 e.set('10')
354 ydgs.place(x = 50, y = 40)
355 
356 lb=Label(root,text = u'个运单类型为',fg = 'red')
357 lb.pack()
358 lb.place(x=90,y=40)
359 
360 ydnx = StringVar(root)               #运单类型,
361 ydnx.set(u'吊装受理开单证')
362 om = OptionMenu(root,ydnx,u'货物托运凭证',u'吊装受理开单',u'其他受理开单')
363 om.pack()
364 om.place(x=170,y=30)
365 
366 lb=Label(root,text = u'结算方式为',fg = 'red')     
367 lb.pack()
368 lb.place(x=300,y=40)
369 
370 jsfs = StringVar(root)              #结算方式
371 jsfs.set('回单付')
372 om = OptionMenu(root,jsfs,u'现付',u'提付',u'回单付',u'月付')
373 om.pack()
374 om.place(x=370,y=30)
375 
376 lb=Label(root,text = u'发货客户id为',fg = 'red')     
377 lb.pack()
378 lb.place(x=450,y=40)
379 
380 e = StringVar()                       #发货客户id
381 fhkhid = Entry(root,width = 5,textvariable = e,bg='#FFD700')
382 fhkhid.pack()
383 e.set('100')
384 fhkhid.place(x = 525, y = 38)
385 
386 
387 lb=Label(root,text = u'的运单',fg = 'red')
388 lb.pack()
389 lb.place(x=20,y=70)
390 
391    
392 button = Button(root,text = u"确定创建",fg = 'blue',bg = '#00bfff',width = 8,height = 1,command = fun2)
393 button.pack(side = RIGHT)
394 button.place(x = 500,y = 62)
395 
396 
397 #调度   ***********************************************调度********************************************************************* 
398 lb=Label(root,text = u'调度运单',fg = 'purple',bg = 'green',width=77)
399 lb.pack(side = LEFT,padx = 0,pady = 0)
400 lb.place(x=20,y=90)
401 
402 lb=Label(root,text = u'调度运单的id从',fg = 'red')
403 lb.pack()
404 lb.place(x=20,y=120)
405 
406 e = StringVar()      #运单开始id
407 ydksid = Entry(root,width = 6,textvariable = e)
408 ydksid.pack()
409 #ydgs.set('10')
410 ydksid.place(x = 110, y = 120)
411 
412 lb=Label(root,text = u'',fg = 'red')
413 lb.pack()
414 lb.place(x=150,y=120)
415 
416 e = StringVar()      #运单结束始id
417 ydjsid = Entry(root,width = 6,textvariable = e)
418 ydjsid.pack()
419 #ydgs.set('10')
420 ydjsid.place(x = 170, y = 120)
421 
422 lb=Label(root,text = u'调度的供应商id为',fg = 'red')
423 lb.pack()
424 lb.place(x=250,y=120)
425 
426 e = StringVar()      #供应商id
427 gysid = Entry(root,width = 4,textvariable = e,bg='#FFD700')
428 gysid.pack()
429 e.set('51')
430 gysid.place(x = 360, y = 120)
431 
432 lb=Label(root,text = u'调度的结算方式为',fg = 'red')
433 lb.pack()
434 lb.place(x=20,y=150)
435 
436 ddjsfs = StringVar(root)           #调度结算方式
437 ddjsfs.set('现付')
438 om = OptionMenu(root,ddjsfs,'现付','回单付','月付')
439 om.pack()
440 om.place(x=120,y=140)
441 
442 lb=Label(root,text = u'驾驶员id为',fg = 'red')
443 lb.pack()
444 lb.place(x=220,y=150)
445 
446 e = StringVar()      #驾驶员id
447 jsyid = Entry(root,width = 4,textvariable = e,bg='#FFD700')
448 jsyid.pack()
449 e.set('32')
450 jsyid.place(x = 290, y = 150)
451 
452 lb=Label(root,text = u'车牌号id为',fg = 'red')
453 lb.pack()
454 lb.place(x=350,y=150)
455 
456 e = StringVar()      #车牌号id
457 cphid = Entry(root,width = 4,textvariable = e,bg='#FFD700')
458 cphid.pack()
459 e.set('14')
460 cphid.place(x = 420, y = 150)
461 
462 button = Button(root,text = u"确定调度",fg = 'blue',bg = '#00bfff',width = 8,height = 1,command = diaodu)
463 button.pack(side = RIGHT)
464 button.place(x = 500,y = 145)
465 
466 #################################id查运单号#################################################
467 lb=Label(root,text = u'id为',fg = 'purple')
468 lb.pack(side = LEFT,padx = 0,pady = 0)
469 lb.place(x=20,y=180)
470 
471 e = StringVar()      #运单id
472 cxdydid= Entry(root,width = 6,textvariable = e)
473 cxdydid.pack()
474 #ydgs.set('10')
475 cxdydid.place(x = 50, y = 180)
476 
477 lb=Label(root,text = u'的运单号是',fg = 'purple')
478 lb.pack(side = LEFT,padx = 0,pady = 0)
479 lb.place(x=90,y=180)
480 
481 dyydhe = StringVar()      #对应运单号
482 dyydh= Entry(root,width = 16,textvariable = dyydhe,fg='#006400',bg='tan')
483 dyydh.pack()
484 #ydgs.set('10')
485 dyydh.place(x = 155, y = 180)
486 
487 '''
488 ydzte = StringVar()      #运单号的运单状态
489 ydzt = Entry(root,width = 8,textvariable = ydzte,fg='green')
490 ydzt.pack()
491 #ydgs.set('10')
492 ydzt.place(x = 410, y = 490)
493 '''
494 
495 button = Button(root,text = u"点击查询",fg = 'blue',bg = '#00ffff',width = 8,height = 1,command = idchayundan)
496 button.pack(side = RIGHT)
497 button.place(x = 273,y = 175)
498 
499 
500 
501 ##############################################################发货##############################################
502 lb=Label(root,text = u'发货',fg = 'purple',bg = 'green',width=77)
503 lb.pack(side = LEFT,padx = 0,pady = 0)
504 lb.place(x=20,y=230)
505 
506 lb=Label(root,text = u'发货的运单号',fg = 'red')
507 lb.pack()
508 lb.place(x=20,y=260)
509 
510 e = StringVar()      #发货的运单号
511 fhydh= Entry(root,width = 16,textvariable = e)
512 fhydh.pack()
513 #ydgs.set('10')
514 fhydh.place(x = 110, y = 260)
515 
516 lb=Label(root,text = u'发货手机的imei',fg = 'red')
517 lb.pack()
518 lb.place(x=250,y=260)
519 
520 e = StringVar()      #发货的手机imei
521 imei = Entry(root,width = 19,textvariable = e,bg='#FFD700')
522 imei.pack()
523 e.set('imei861483035137583')
524 imei.place(x = 350, y = 260)
525 
526 button = Button(root,text = u"确定发货",fg = 'blue',bg = '#00bfff',width = 8,height = 1,command = fahuo)
527 button.pack(side = RIGHT)
528 button.place(x = 500,y = 255)
529 
530 ####################################################发短信###################################################
531 lb=Label(root,text = u'发短信',fg = 'purple',bg = 'green',width=77)
532 lb.pack(side = LEFT,padx = 0,pady = 0)
533 lb.place(x=20,y=310)
534 
535 lb=Label(root,text = u'',fg = 'red')
536 lb.pack()
537 lb.place(x=20,y=340)
538 
539 e = StringVar()      #发短信的运单号
540 fdxydh = Entry(root,width = 16,textvariable = e)
541 fdxydh.pack()
542 #ydgs.set('10')
543 fdxydh.place(x = 50, y = 340)
544 
545 lb=Label(root,text = u'这个运单发短信',fg = 'red')
546 lb.pack()
547 lb.place(x=170,y=340)
548 
549 button = Button(root,text = u"确认发短信",fg = 'blue',bg = '#00bfff',width = 8,height = 1,command = faduanxin)
550 button.pack(side = RIGHT)
551 button.place(x = 500,y = 340)
552 
553 #################################################收货###############################################################
554 lb=Label(root,text = u'收货',fg = 'purple',bg = 'green',width=77)
555 lb.pack(side = LEFT,padx = 0,pady = 0)
556 lb.place(x=20,y=390)
557 
558 lb=Label(root,text = u'收货的运单号:',fg = 'red')
559 lb.pack()
560 lb.place(x=20,y=420)
561 
562 e = StringVar()      #收货的运单号
563 shydh = Entry(root,width = 16,textvariable = e)
564 shydh.pack()
565 #ydgs.set('10')
566 shydh.place(x = 110, y = 420)
567 
568 button = Button(root,text = u"确认收货",fg = 'blue',bg = '#00bfff',width = 8,height = 1,command = shouhuo)
569 button.pack(side = RIGHT)
570 button.place(x = 500,y = 420)
571 
572 ##########'''********************************查询运单的状态*******************************'''
573 lb=Label(root,text = u'查询运单状态',fg = 'purple',bg = 'green',width=77)
574 lb.pack(side = LEFT,padx = 0,pady = 0)
575 lb.place(x=20,y=460)
576 
577 lb=Label(root,text = u'请输入运单号:',fg = 'purple')
578 lb.pack()
579 lb.place(x=20,y=490)
580 
581 e = StringVar()      #查询的运单号
582 cxydh = Entry(root,width = 16,textvariable = e)
583 cxydh.pack()
584 #ydgs.set('10')
585 cxydh.place(x = 110, y = 490)
586 
587 button = Button(root,text = u"点击查询",fg = 'blue',bg = '#00ffff',width = 8,height = 1,command = chaxunyundanzt)
588 button.pack(side = RIGHT)
589 button.place(x = 273,y = 485)
590 
591 lb=Label(root,text = u'运单状态为:',fg = 'purple')
592 lb.pack()
593 lb.place(x=340,y=490)
594 
595 ydzte = StringVar()      #运单号的运单状态
596 ydzt = Entry(root,width = 8,textvariable = ydzte,fg='#006400',bg='tan')
597 ydzt.pack()
598 #ydgs.set('10')
599 ydzt.place(x = 410, y = 490)
600 
601 lb=Label(root,text = u'id为:',fg = 'purple')
602 lb.pack()
603 lb.place(x=470,y=490)
604 
605 yddid = StringVar()      #运单号id
606 et = Entry(root,width = 8,textvariable = yddid,fg='#006400',bg='tan')
607 et.pack()
608 #ydgs.set('10')
609 et.place(x = 505, y = 490)
610 
611 
612 
613 '''*********************底部图片**********************'''
614 img = ImageTk.PhotoImage(file='yuanzhao.png')
615 lb=Label(root, text="abc", image=img)
616 lb.pack(side="top")
617 lb.place(x=0,y=540)
618 
619 
620 
621 root.mainloop()




最后随便上两个运行时的截图。

 

 




此工具的接口使用项目的抓包接口或者参考协议文档。做这个工具的目的是,把系统主流程功能全部都放在一个界面上,因为系统分为web erp管理端和app扫码发货 收货端,每个端都是十几个页面,来回的切换页面测试,特别是web端的运单和调度需要填写大量的页面表单是很废时间和令人狂躁的一件事情。

从代码中可以看到,tkinter的代码并不难就那几句话,后台脚本写出来了后,构建工具界面大概要多花半天时间。功能的触发是通过按钮与函数绑定,点击什么按钮就执行什么函数功能,传统的脚本方式操作想执行一个函数时候,需要把调用另一个函数的代码注释掉,这也是界面工具的一个优势吧,点什么执行什么。


上面的界面工具是直接运行代码弹出来的,脚本的文件名称是yuanzhao.py,如果想做成exe客户端,需要写另一个文件,我们取名为setup.py,其中代码如下。


 1 from distutils.core import setup
 2 import py2exe
 3 
 4 #setup(windows=['yuanzhao.py'])
 5 
 6 
 7 setup( 
 8 # targets to build 
 9 windows = [{"script":"yuanzhao.py", "icon_resources": [(0, "yuanzhao.ico")]} ] 
10 ) 
运行  python setup.py py2exe,就能打包成功了,此时路径下会生成两个文件夹,

我们来看看dist文件夹就可以了。此文件就是工具的使用路径,

这样就能把dist文件夹放到任意没安装py脚本中第三方包或者没安装python的电脑运行测试工具了。

 






posted @ 2017-05-07 12:34  北风之神0509  阅读(2389)  评论(0编辑  收藏  举报