小小万年历改头换面了

简介: 小小万年历改头换面了

小小万年历改头换面了
前阶段编写了一个[万年历小程序][],因为界面不太友好,所以这两天有空闲时间,我又对小工具进行了功能增加并改成了窗口界面,可以用鼠标点击和键盘输入年月日。其中界面的设计大部分是用AI实现的,又一次切实感受到了AI时代的高效、快捷。并且把这个小工具打包成exe文件,分享给身边的好朋友。

源码如下:

import tkinter as tk
from tkinter import messagebox
from zhdate import ZhDate
from datetime import datetime
from lunardate import LunarDate


class DateConverterGUI:
    def __init__(self, root):
        self.root = root
        self.root.title("小小万年历--微信公众号强壮Python")
        self.root.geometry("400x250")
        self.root.resizable(False, False)
        # 创建标签和输入框
        self.label = tk.Label(root, text="今天:{}年{}月{}日".format(datetime.today().year, datetime.today().month,
                                                                    datetime.today().day))
        self.choice_var = tk.IntVar()
        self.choice_var.set(1)
        self.radio1 = tk.Radiobutton(root, text="阳历转阴历", variable=self.choice_var, value=1)

        self.radio2 = tk.Radiobutton(root, text="阴历转阳历", variable=self.choice_var, value=2)

        self.year_label = tk.Label(root, text="      年  份:")

        self.year_entry = tk.Entry(root)

        self.month_label = tk.Label(root, text="      月  份:")

        self.month_entry = tk.Entry(root)

        self.day_label = tk.Label(root, text="      日  份:")

        self.day_entry = tk.Entry(root)

        self.convert_button = tk.Button(root, text=" 转换日期 ", command=self.convert_date)

        self.label.grid(row=0, column=0, padx=3, sticky=tk.W)

        self.year_label.grid(row=1, column=0, padx=32, pady=5, sticky=tk.W)
        self.year_entry.grid(row=1, column=1, pady=5, sticky=tk.W)
        self.month_label.grid(row=2, column=0, padx=32, pady=5, sticky=tk.W)
        self.month_entry.grid(row=2, column=1, pady=5, sticky=tk.W)
        self.day_label.grid(row=3, column=0, padx=32, pady=5,sticky=tk.W)
        self.day_entry.grid(row=3, column=1, pady=5,sticky=tk.W)
        self.year_label.config(highlightcolor='red')
        self.radio1.grid(row=5, column=0, padx=7, sticky=tk.W)
        self.radio2.grid(row=5, column=1, sticky=tk.W)
        # 创建输出结果的文本框
        self.result_label = tk.Label(root, text="转换结果:")
        self.result_text = tk.Text(root, height=19, width=57)
        self.result_text.grid(row=9, column=0, columnspan=5, pady=6, sticky=tk.W)
        self.convert_button.grid(row=8, column=0, columnspan=5, padx=284, sticky=tk.W)

    def convert_date(self):
        # 清空之前的结果
        self.result_text.delete('1.0', tk.END)

        choice = self.choice_var.get()
        try:
            year = int(self.year_entry.get())
            month = int(self.month_entry.get())
            day = int(self.day_entry.get())
        except Exception as e:
            messagebox.showerror("错误", "年月日不能为空!")

        try:
            if choice == 1:
                solar_date = SolarLunar(year, month, day)
                result = solar_date.solar_convert_date()
            elif choice == 2:
                lunar_date = SolarLunar(year, month, day)
                result = lunar_date.lunar_convert_date()

            # 将结果显示在文本框中
            self.result_text.insert(tk.END, result)
        except Exception as e:
            messagebox.showerror("错误", "数据转换错误!!请核对日份!!!")

    def run(self):
        self.root.mainloop()


class SolarLunar:
    # 定义初始化函数
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day

    # 阳历转阴历
    def solar_convert_date(self):
        self._date = datetime(year=self.year, month=self.month, day=self.day)
        chinese_date = ZhDate.from_datetime(self._date).chinese()
        weeknum, weekday = self.get_weekday()
        result = f"阴历日期(农历):{chinese_date}\n" \
                 f"阳历:全年的第{weeknum}周的{['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天'][weekday - 1]}"
        return result

    # 阴历转阳历
    def lunar_convert_date(self):
        lunardate = LunarDate(self.year, self.month, self.day).toSolarDate()
        lunardate_list = str(lunardate).split('-')
        solar_year, solar_month, solar_day = int(lunardate_list[0]), int(lunardate_list[1]), int(lunardate_list[2])
        self._date = datetime(solar_year, solar_month, solar_day)
        weeknum, weekday = self.get_weekday()
        result = f"阳历日期(阳历):{lunardate}\n" \
                 f"全年的第{weeknum}周的{['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天'][weekday - 1]}"
        return result

    # 阳历的全年第几周的周几
    def get_weekday(self):
        """
        Convert date to weekday (Monday=0, Tuesday=1, ..., Sunday=6)
        """
        return (self._date.isocalendar().week), (self._date.weekday() + 1) % 7


if __name__ == '__main__':
    root = tk.Tk()
    app = DateConverterGUI(root)
    app.run()

运行效果如下:
image.png
image.png

相关文章
|
11天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
7天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2514 17
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
7天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1520 14
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
3天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
9天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
552 14
|
1月前
|
运维 Cloud Native Devops
一线实战:运维人少,我们从 0 到 1 实践 DevOps 和云原生
上海经证科技有限公司为有效推进软件项目管理和开发工作,选择了阿里云云效作为 DevOps 解决方案。通过云效,实现了从 0 开始,到现在近百个微服务、数百条流水线与应用交付的全面覆盖,有效支撑了敏捷开发流程。
19282 30
|
9天前
|
人工智能 自动驾驶 机器人
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
过去22个月,AI发展速度超过任何历史时期,但我们依然还处于AGI变革的早期。生成式AI最大的想象力,绝不是在手机屏幕上做一两个新的超级app,而是接管数字世界,改变物理世界。
473 48
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
|
1月前
|
人工智能 自然语言处理 搜索推荐
阿里云Elasticsearch AI搜索实践
本文介绍了阿里云 Elasticsearch 在AI 搜索方面的技术实践与探索。
18838 20
|
1月前
|
Rust Apache 对象存储
Apache Paimon V0.9最新进展
Apache Paimon V0.9 版本即将发布,此版本带来了多项新特性并解决了关键挑战。Paimon自2022年从Flink社区诞生以来迅速成长,已成为Apache顶级项目,并广泛应用于阿里集团内外的多家企业。
17528 13
Apache Paimon V0.9最新进展
|
2天前
|
云安全 存储 运维
叮咚!您有一份六大必做安全操作清单,请查收
云安全态势管理(CSPM)开启免费试用
362 4
叮咚!您有一份六大必做安全操作清单,请查收