下载python3.11版本的python环境(官网下载地址:https://www.python.org/)
鼠标指向Downloads
(不用点击)会弹出下拉框,直接点击windows
下的Python 3.11
即可下载。
然后点击开始下载,Python
就下载好了。(也可以点windows
去下载想要的版本)
安装python
下载PyCharm工具
官网下载地址:https://www.jetbrains.com/pycharm/
具体安装教程可以百度找破解版,这里就不详细描述。
打包成.exe
命令; dd.py
替换成自己的文件名。
pyinstaller -F -w dd.py
可以在PyCharm
工具里打包,如下图(也可以在cmd
中找到该文件位置,进行该命令进行打包)。
打包成功后会在dist
文件夹下。
看成品效果。
以下是完整代码。
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()