python3+pyqt5实现三天打鱼两天晒网


版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/dcjmessi/article/details/82286194

问题简述:有句俗语“三天打鱼两天晒网”,某人从2010年1月1日开始“三天打鱼两天晒网”,问这个人在以后的某一天是“打鱼”还是“晒网”
问题分析:根据输入年月日,求出天数,再对5求余,得出打鱼还是晒网

# _*_ coding: utf-8 _*_
# 作者:dcjmessi
# 日期:2018/8/29

from PyQt5.QtWidgets import *
import sys`

class Fishnet(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    #初始化界面
    def initUI(self):

        #设置窗口大小
        self.setGeometry(500, 500, 400, 450)
        #设置窗口标题
        self.setWindowTitle('三天打鱼两天晒网')

        #创建一个标签
        self.lb1 = QLabel('年:', self)
        self.lb1.move(20, 20)
        self.lb2 = QLabel('月:', self)
        self.lb2.move(20, 80)
        self.lb3 = QLabel('日:', self)
        self.lb3.move(20, 140)

        #初始化年月日标签
        self.lb4 = QLabel('2010', self)
        self.lb4.move(80, 20)
        self.lb5 = QLabel('01', self)
        self.lb5.move(80, 80)
        self.lb6 = QLabel('01', self)
        self.lb6.move(80, 140)

        #创建一个文本框
        self.tb = QTextBrowser(self)
        self.tb.move(20, 230)

        #创建按钮
        self.bt1 = QPushButton('修改年份', self)
        self.bt1.move(200, 20)
        self.bt2 = QPushButton('修改月份', self)
        self.bt2.move(200, 80)
        self.bt3 = QPushButton('修改日期', self)
        self.bt3.move(200, 140)
        self.bt4 = QPushButton('确定',self)
        self.bt4.move(200, 180)

        self.show()

        #给按钮绑定事件
        self.bt1.clicked.connect(self.showDialog)
        self.bt2.clicked.connect(self.showDialog)
        self.bt3.clicked.connect(self.showDialog)
        self.bt4.clicked.connect(self.allday)

    #输入年月日
    def showDialog(self):
        sender = self.sender()
        if sender == self.bt1:
            text, ok = QInputDialog.getInt(self, '修改年份', '请输入:', min = startyear)
            if ok:
                self.lb4.setText(str(text))
                self.year = text
        elif sender == self.bt2:
            text, ok = QInputDialog.getInt(self, '修改月份', '请输入:', min = 1)
            if ok:

                #判断月份是否正确
                if text <= 12:
                    self.lb5.setText(str(text))
                    self.month = text
                else:
                    QMessageBox.information(self, "错误", "月份不正确", QMessageBox.Yes)

        elif sender == self.bt3:
            text, ok = QInputDialog.getInt(self, '修改日期', '请输入:', min = 1)
            if ok:

                #判断日期是否正确
                if (self.month == 1) or (self.month == 3) or (self.month == 5) or (self.month == 7) or \
                        (self.month == 8) or (self.month == 10) or (self.month == 12):
                    if text <= 31:
                        self.lb6.setText(str(text))
                        self.day = text
                    else:
                        QMessageBox.information(self, "错误", "日期不正确", QMessageBox.Yes)
                if (self.month == 4) or (self.month == 6) or (self.month == 9) or (self.month == 11):
                    if text <= 30:
                        self.lb6.setText(str(text))
                        self.day = text
                    else:
                        QMessageBox.information(self, "错误", "日期不正确", QMessageBox.Yes)
                if (self.month == 2):
                    if (text == 28) or (text == 29):
                        self.lb6.setText(str(text))
                        self.day = text
                    else:
                        QMessageBox.information(self, "错误", "日期不正确", QMessageBox.Yes)

    # 计算所输入的这一年天数
    def thisyearday(self):

        # 以平年为准,从1月1日到所输入月份的天数
        months = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334)

        # 用months数组算出天数
        self.sum = months[self.month - 1]

        # 与当月天数相加
        self.sum += self.day

        # 判断所输入年份是否为闰年,如果是,则多加一天
        if (self.year % 400 == 0) or (self.year % 4 == 0 and self.year % 100 != 0):
            leap = 1
            if (leap == 1) and (self.month > 2):
                self.sum += 1
        return self.sum

    # 判断2010年是否为闰年,如果是,则多加一天
    def startyearday(self):
        if (startyear % 400 == 0) or (startyear % 4 == 0 and startyear % 100 != 0):
            self.leap1 = 1
        else:
            self.leap1 = 0
        return self.leap1

    # 计算除2010年外的整年天数
    def intactyearday(self):
        i = 0
        self.leap2 = 0

        # 遍历2010到所输入年份之间的年份
        if i < self.year - startyear - 1:
            i += 1
            nyear = 2010 + i

            # 判断是否为闰年,如果是,则多加一天
            if (nyear % 400 == 0) or ((nyear % 4 == 0) and (nyear % 100 != 0)):
                self.leap2 += 1
        return self.leap2

    #计算总天数并得出结果
    def allday(self):
        self.thisyearday()
        self.startyearday()
        self.intactyearday()

        #计算总天数
        numdays = (self.year - startyear) * 365 + self.leap1 + self.leap2 + self.sum

        #总天数除5求余,得到结果
        self.result = numdays % 5
        if (self.result == 1) or (self.result == 2) or (self.result == 3):
            self.tb.setText("打鱼")
        else:
            self.tb.setText("晒网")

if __name__ == '__main__':

    # 定义起始年份
    startyear = 2010

    app = QApplication(sys.argv)
    ex = Fishnet()
    sys.exit(app.exec_())

代码运行结果:
运行结果
输入框:
输入框
错误提示框:
错误提示框

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dcjmessi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值