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
Python简单实现查找一个字符串中最长不重复子串的方法
Mar 26 Python
django模板结构优化的方法
Feb 28 Python
Python在Matplotlib图中显示中文字体的操作方法
Jul 29 Python
Python 转换RGB颜色值的示例代码
Oct 13 Python
python两个_多个字典合并相加的实例代码
Dec 26 Python
Django 路由层URLconf的实现
Dec 30 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
Feb 14 Python
Python基于requests库爬取网站信息
Mar 02 Python
Python使用itcaht库实现微信自动收发消息功能
Jul 13 Python
pycharm 配置svn的图文教程(手把手教你)
Jan 15 Python
pytorch 6 batch_train 批训练操作
May 28 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
基于PHP编程注意事项的小结
2013/04/27 PHP
如何在PHP中使用数组
2020/06/09 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
JS TextArea字符串长度限制代码集合
2012/10/31 Javascript
js 验证密码强弱的小例子
2013/03/21 Javascript
js导出table到excel同时兼容FF和IE示例
2013/09/03 Javascript
基于js实现投票的实例代码
2015/08/04 Javascript
JS组件Bootstrap Table表格多行拖拽效果实现代码
2015/12/08 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
2016/05/31 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
javascript 设计模式之享元模式原理与应用详解
2020/04/08 Javascript
Vue微信公众号网页分享的示例代码
2020/05/28 Javascript
[40:27]完美世界DOTA2联赛PWL S3 PXG vs GXR 第一场 12.19
2020/12/24 DOTA
详解Python list 与 NumPy.ndarry 切片之间的对比
2017/07/24 Python
快速了解python leveldb
2018/01/18 Python
Python干货:分享Python绘制六种可视化图表
2018/08/27 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
python实现趣味图片字符化
2019/04/30 Python
Python跳出多重循环的方法示例
2019/07/03 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
wxPython实现绘图小例子
2019/11/19 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
Python3实现mysql连接和数据框的形成(实例代码)
2020/01/17 Python
tensorflow实现训练变量checkpoint的保存与读取
2020/02/10 Python
Pytorch环境搭建与基本语法
2020/06/03 Python
python3.7添加dlib模块的方法
2020/07/01 Python
全球性的众包图形设计市场:DesignCrowd
2021/02/02 全球购物
《与象共舞》教学反思
2014/02/24 职场文书
求职自荐信怎么写
2014/03/06 职场文书
2014年冬季防火方案
2014/05/21 职场文书
2015年维修电工工作总结
2015/04/25 职场文书
班主任班级管理心得体会
2016/01/07 职场文书
党员干部学习心得体会
2016/01/23 职场文书
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js