• PythonGUI编程|使用Tkinter制作快递查询软件


    前言

    GUI(图形用户界面)想必大家都不陌生,简单来说就是将代码变成可以交互式操作的界面。在Python中就提供了多个图形开发界面的库,比如TkinterwxPythonJython等,本文将使用Tkinter来制作一个简单的快递查询软件,先来看看效果

    为什么使用Tkinter?因为Tkinter 是 Python 的标准 GUI 库,只要安装好 Python 之后就能直接使用,对于我们这样一个简单的小程序还是能应付自如。

    好了,现在我们来分析应该如何制作,其实主要就是下面两个步骤:

    • Python爬取快递查询网站

    • 使用Tkinter制作界面

    所以我将按照上面两项来说明制作过程。

    爬取快递网站

    在这一步,我们需要做的就是写一个函数,我们给它一个快递单号就能将该单号的物流信息返回,首先说一下走过的坑,在一开始的思路就是找个快递查询的网站,然后抓一下包就能拿到我们需要的内容,结果一操作发现国内查快递的网站基本用的都是快递100的API,申请个API还挺麻烦的。不申请API直接爬的物流信息被各种加密。折腾半天终于找到一个手机端的网站可以使用。直接上代码

    import requests
    import bs4
    import re
    kuaidi = []
    url='http://m.46644.com/express/result.php?typetxt=%D6%D0%CD%A8&type=zto&number=你的单号'
    response = requests.get(url)
    response.encoding = 'gb18030' 
    response = response.text
    soup = bs4.BeautifulSoup(response,'html.parser',from_encoding="utf8")
    for i in soup.findAll(name='div',attrs = {'class':'icontent'}):
        kuaidi.append(i.get_text())
        print(i.get_text())

    这一段代码我们使用多很多次就不过多解读了,用Requests请求并使用bs4提取我们需要的信息,当然注意到这只是中通快递的查询链接

    因此我们只需要再写一个函数来生成更多快递公司的查询链接就可以查询多家快递信息,这样我们就完成了第一步:提供一个单号,返回对应的物流信息

    制作界面

    在上一步,我们已经实现第一个功能:查询物流信息,现在要做的就是整出一个界面,这个界面要有一个文本输入框、一个按钮和一个显示物流信息的区域,而这对于Tkinter来说也并不困难,比如三行代码即可生成一个页面

    import tkinter as tk
    root = tk.Tk()
    root.mainloop()

    当然这个界面中什么都没有,接下来就是对这个界面进行修改,比如先调整大小和背景

    import tkinter as tk
    HEIGHT = 500
    WIDTH = 600
    root = tk.Tk()
    canvas = tk.Canvas(root, height=HEIGHT, width=WIDTH)
    canvas.pack()
    background_image = tk.PhotoImage(file='/Users/liuhuanshuo/Desktop/bg1.png')
    background_label = tk.Label(root, image=background_image)
    background_label.place(relwidth=1, relheight=1)
    root.mainloop()

    接着我们用下面的代码添加按钮和输入框

    frame = tk.Frame(root, bg='#80c1ff', bd=5)
    frame.place(relx=0.5, rely=0.1, relwidth=0.75, relheight=0.1, anchor='n')
    
    entry = tk.Entry(frame, font=40)
    entry.place(relwidth=0.65, relheight=1)
    
    button = tk.Button(frame, text="查快递", font=40, command=lambda: kuaidi(entry.get()))
    button.place(relx=0.7, relheight=1, relwidth=0.3)

    最后再添加亿点细节就差不多了!

    可以看到,仅用了不到30行代码,我们就成功做出来界面,而这些代码的详细参数设置都可以查阅官方文档,这里就不在赘述,最后只要结合我们上一步的爬取物流信息的代码就大功告成!

    结束语

    回顾上面整个过程,好像也没有用到特别复杂的工具,如果自己独立敲一遍我想应该会有所收获,并且基于这个例子可以实现更多的功能,比如添加其他按钮来实现更多功能,或者将查快递改为查天气、查单词等,这些就留给你们了,拜拜~

  • 相关阅读:
    UVa 128 Software CRC
    UVa 11258 String Partition(简单DP)
    POJ 3070 Fibonacci(矩阵乘法logN)
    UVa 10280 Old Wine Into New Bottles(剪枝+完全背包)
    图论笔记第四章 欧拉图与哈密尔顿图(beta.)考点
    图。。珍藏season
    图论及其应用哈密尔顿图(alpha)
    9.保健…todo
    android 移植笔记有感
    unp_exam_要点.doc
  • 原文地址:https://www.cnblogs.com/liuzaoqi/p/13041407.html
Copyright © 2020-2023  润新知