python使用tkinter写带界面的工具
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的电脑运行测试工具了。
以上是关于python使用tkinter写带界面的工具的主要内容,如果未能解决你的问题,请参考以下文章