python日出日落时间实现和详解

目录

    • 前期准备内容
    • 如何打包成.exe
    • 具体实现代码

前期准备内容

  1. 下载python3.11版本的python环境(官网下载地址:https://www.python.org/)

    鼠标指向Downloads(不用点击)会弹出下拉框,直接点击windows下的Python 3.11即可下载。
    然后点击开始下载,Python就下载好了。(也可以点windows去下载想要的版本)

  2. 安装python

    勾选Add Python 3.11 to PATH,选择Install Nowpython日出日落时间实现和详解_第1张图片

    等待Python安装完。点击下方limit,就完成了安装。
    python日出日落时间实现和详解_第2张图片

  3. 下载PyCharm工具
    官网下载地址:https://www.jetbrains.com/pycharm/
    具体安装教程可以百度找破解版,这里就不详细描述。

如何打包成.exe

打包成.exe命令; dd.py 替换成自己的文件名。

pyinstaller -F -w dd.py

可以在PyCharm工具里打包,如下图(也可以在cmd中找到该文件位置,进行该命令进行打包)。

python日出日落时间实现和详解_第3张图片

打包成功后会在dist文件夹下。

python日出日落时间实现和详解_第4张图片

具体实现代码

看成品效果。

python日出日落时间实现和详解_第5张图片
python日出日落时间实现和详解_第6张图片

以下是完整代码。

tkinter是创建页面使用的包
astral 是计算时间的包
from babel import numbers这个必须要引入,不然打包成.exe的时候启动会报没有该包的错误导致无法启动,我们这里直接引入后打包进去
re是正则的验证

import tkinter
import tkinter.messagebox
from astral import LocationInfo
from astral import sun
import datetime
from tkcalendar import DateEntry
from babel import numbers
import re

# 具体实现逻辑
def sunsetQuery():
    # 城市名
    name = 'XiChong'
    # 国家
    region = 'China'
    # 时区
    timezone = 'Asia/Harbin'
    # 维度
    # latitude = 22.484786
    latitudes = entryLatitude.get().strip()
    # 经度
    # longitude = 114.549965
    longitudes = entryLongitude.get().strip()
    # 时间日期  Y意思是YYYY  y意思是YY
    date = datetime.datetime.strptime(labelCal.get(), "%m/%d/%y")

    # 经纬度验证
    if len(latitudes) == 0 or len(latitudes) == None:
        return tkinter.messagebox.showinfo('erro', "请输入维度坐标")
    elif not bool(re.match(r'^(\+|-)?(?:90(?:(?:\.0{1,6})?)|(?:[0-9]|[1-8][0-9])(?:(?:\.[0-9]{1,6})?))$', latitudes)):
        return tkinter.messagebox.showinfo('erro', "请输入正确维度坐标")
    if len(longitudes) == 0 or len(longitudes) == None:
        return tkinter.messagebox.showinfo('erro', "请输入经度坐标")
    elif not bool(re.match(r'^(\+|-)?(?:180(?:(?:\.0{1,6})?)|(?:[0-9]|[1-9][0-9]|1[0-7][0-9])(?:(?:\.[0-9]{1,6})?))$', longitudes)):
        return tkinter.messagebox.showinfo('erro', "请输入正确经度坐标")

    location = LocationInfo(name, region, timezone, latitudes, longitudes)
    # 获取当前时间日期
    sunrise = sun.sunrise(location.observer, date, location.timezone)
    # 计算相应时间的日出
    sunrise_new = str(datetime.datetime.strftime(sunrise, "%Y-%m-%d %H:%M:%S"))

    sunset = sun.sunset(location.observer, date, location.timezone)
    # 计算相应时间的日落
    sunset_new = str(datetime.datetime.strftime(sunset, "%Y-%m-%d %H:%M:%S"))
    tkinter.messagebox.showinfo('日落日出时间', "日出时间:" + sunrise_new + "\r" + "日落时间:" + sunset_new)


# 清空输入框内容
def cancel():
    latitude.set('')
    longitude.set('')

# ==============================以下代码是页面展示=========================
window = tkinter.Tk()
window.title('经纬度获取日落日出时间')

# 获取屏幕尺寸计算参数,使窗口显示再屏幕中央
screen_width = window.winfo_screenwidth()
screen_height = window.winfo_screenheight()
width = 400
height = 240
window_size = f'{width}x{height}+{round((screen_width-width)/2)}+{round((screen_height-height)/2)}' # round去掉小数
window.geometry(window_size)

latitude = tkinter.StringVar()
longitude = tkinter.StringVar()
# 创建标签
labelLatitude = tkinter.Label(window, text='纬度', justify=tkinter.RIGHT, width=160)
# 将标签放到窗口上
labelLatitude.place(x=15, y=15, width=140, height=30)
# 创建文本框,并设置关联的变量
entryLatitude = tkinter.Entry(window, width=160, textvariable=latitude)
entryLatitude.place(x=200, y=15, width=160, height=30)

labelLongitude = tkinter.Label(window, text='经度', justify=tkinter.RIGHT, width=160)
labelLongitude.place(x=5, y=60, width=160, height=30)
# 创建文本框
entryLongitude = tkinter.Entry(window, width=80, textvariable=longitude)
entryLongitude.place(x=200, y=60, width=160, height=30)

# 创建日期选择器
labelDate = tkinter.Label(window, text='日期', justify=tkinter.RIGHT, width=160)
labelDate.place(x=5, y=105, width=160, height=30)
labelCal = DateEntry(window, width=12, year=datetime.datetime.now().year, month=datetime.datetime.now().month,
                     day=datetime.datetime.now().day, background='darkblue', foreground='white', borderwidth=2)
labelCal.place(x=200, y=105, width=160, height=30)

# 创建按钮组件,同时设置按钮事件处理函数
buttonOk = tkinter.Button(window, text='查询', command=sunsetQuery)
buttonOk.place(x=80, y=180, width=100, height=30)
buttonCancel = tkinter.Button(window, text='清空', command=cancel)
buttonCancel.place(x=200, y=180, width=100, height=30)
# 启动消息循环
window.mainloop()

你可能感兴趣的:(python,pycharm,开发语言)