Python制作简易版小工具之计算天数的实现思路


Posted in Python onFebruary 13, 2020

需求

给定一个日期,格式如 “2020-2-12”,计算出这个日期是 2020 年的第几天?

实现思路

  1. 使用 tkinter 和 tkinter.ttk 对界面进行布置;
  2. 使用 calendar 计算天数;
  3. 规范输入日期的格式;
  4. 对月份,天数进行逻辑判断;
  5. 输入错误抛出异常提示。

代码实现

# -*- coding: utf-8 -*-
'''
@File: calc_day_v2.py
@Time: 2020/02/12 20:33:22
@Author: 大梦三千秋
@Contact: yiluolion@126.com
'''
# Put the import lib here
from tkinter import *
import tkinter.messagebox as messagebox
from tkinter import ttk
import calendar
class MyException(BaseException):
  '''自定义异常类
  '''
  def __init__(self, message):
    self.message = message
def calculate(*args):
  '''计算天数方法
  '''
  try:
    # 用以存储天数
    nums = 0
    # 获取输入框中的数据
    year, month, day = [int(elem) for elem in date.get().split('-')]
    # 判断月份,规定在 1-12 之间
    if 1 <= month <= 12:
      # 遍历计算天数
      for month_x in range(1, month + 1):
        # 计算每月的天数
        _, month_day = calendar.monthrange(year, month_x)
        # 遍历的月份等于当前月份,对天数进行规整
        if month_x == month:
          # 文本输入框给出的天数不符合,则抛出异常
          if day > month_day:
            raise MyException("信息输入错误,注意天数!")
          continue
        nums += month_day
      nums += day
      # 设置值到文本框
      days.set(nums)
      the_year.set(year)
    else: # 月份超出范围抛出异常
      raise MyException("信息输入错误,注意月份!")
  except MyException as e:
    messagebox.showinfo(title="输入信息错误", message=e)
  except Exception as e:
    # print(e)
    messagebox.showinfo(title="输入信息错误", message="输出格式错误,按照 2020-2-12 这样的格式输入。注意月份,天数!")
root = Tk()
root.title("计算天数")
# 设置框架
mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, S, E, W))
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
date = StringVar()
the_year = StringVar()
days = StringVar()
# 文本框部件布置
date_entry = ttk.Entry(mainframe, width=10, textvariable=date)
date_entry.grid(column=2, row=1, sticky=(W, E))
# 标签及按钮的布置
ttk.Label(mainframe, text="例如:2020-2-12").grid(column=5, row=1, sticky=(W, E))
ttk.Label(mainframe, textvariable=days).grid(column=4, row=2, sticky=(W, E))
ttk.Label(mainframe, textvariable=the_year).grid(column=2, row=2, sticky=(W, E))
ttk.Button(mainframe, text="Calculate", command=calculate).grid(column=5, row=3)
ttk.Label(mainframe, text="日期:").grid(column=1, row=1, sticky=E)
ttk.Label(mainframe, text="这一天是").grid(column=1, row=2, sticky=E)
ttk.Label(mainframe, text="年的第").grid(column=3, row=2, sticky=E)
ttk.Label(mainframe, text="天").grid(column=5, row=2, sticky=W)
# 设置内边距
for child in mainframe.winfo_children():
  child.grid_configure(padx=5, pady=5)
date_entry.focus()
root.bind('<Return>', calculate)
root.mainloop()

使用效果

正确输入的效果如下:

 Python制作简易版小工具之计算天数的实现思路

未按照格式输入,错误提示效果:

 Python制作简易版小工具之计算天数的实现思路

月份输入错误,提示效果如下:

 Python制作简易版小工具之计算天数的实现思路

天数超出当月范围的错误提示效果:

 Python制作简易版小工具之计算天数的实现思路

本篇的内容主要是对昨天的 tkinter 模块的延展使用,实现一个计算天数的小工具。

以上所述是小编给大家介绍的Python制作简易版小工具之计算天数的实现思路,希望对大家有所帮助!

Python 相关文章推荐
python数据结构之二叉树的遍历实例
Apr 29 Python
Python3中多线程编程的队列运作示例
Apr 16 Python
Linux下用Python脚本监控目录变化代码分享
May 21 Python
Python中join函数简单代码示例
Jan 09 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
Mar 20 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
Aug 02 Python
python实现动态创建类的方法分析
Jun 25 Python
浅谈python中统计计数的几种方法和Counter详解
Nov 07 Python
python常用排序算法的实现代码
Nov 08 Python
Transpose 数组行列转置的限制方式
Feb 11 Python
Django通过json格式收集主机信息
May 29 Python
PyCharm中配置PySide2的图文教程
Jun 18 Python
解决python-docx打包之后找不到default.docx的问题
Feb 13 #Python
Python更新所有已安装包的操作
Feb 13 #Python
python离线安装外部依赖包的实现
Feb 13 #Python
python获取依赖包和安装依赖包教程
Feb 13 #Python
python连接mongodb集群方法详解
Feb 13 #Python
安装完Python包然后找不到模块的解决步骤
Feb 13 #Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
Feb 13 #Python
You might like
8个PHP数组面试题
2015/06/23 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
2017/06/06 PHP
Laravel5.5以下版本中如何自定义日志行为详解
2018/08/01 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
基于Jquery的简单&amp;简陋Tabs插件代码
2010/02/09 Javascript
JavaScript 轻松搞定快捷留言功能 只需一行代码
2010/04/01 Javascript
发布一个基于javascript的动画类 Fx.js
2010/11/05 Javascript
javascript禁用键盘功能键让右击及其他键无效
2013/10/09 Javascript
使用 Node.js 对文本内容分词和关键词抽取
2017/05/27 Javascript
vue中实现methods一个方法调用另外一个方法
2018/02/08 Javascript
js 图片转base64的方式(两种)
2018/04/24 Javascript
vue中组件通信的八种方式(值得收藏!)
2019/08/09 Javascript
js实现鼠标点击飘爱心效果
2020/08/19 Javascript
Python中optparse模块使用浅析
2015/01/01 Python
Python简单计算文件夹大小的方法
2015/07/14 Python
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
Python实现调度算法代码详解
2017/12/01 Python
20个常用Python运维库和模块
2018/02/12 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
2019/08/31 Python
python实现飞船大战
2020/04/24 Python
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
CSS3+font字体文件实现圆形半透明菜单具体步骤(图解)
2013/06/03 HTML / CSS
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
欧洲著名的珠宝和手表网上商城:uhrcenter
2017/04/10 全球购物
解除合同协议书
2014/04/17 职场文书
心理健康日活动总结
2014/05/08 职场文书
交通违章检讨书
2014/09/21 职场文书
2014国庆65周年领导讲话稿(3篇)
2014/09/21 职场文书
工作业绩不及格检讨书
2014/10/28 职场文书
铁人纪念馆观后感
2015/06/16 职场文书
读后感怎么写?书写读后感的基本技巧!
2019/12/10 职场文书
django中websocket的具体使用
2022/01/22 Python
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python