首页 > 其他分享 >2024年5月15日第四十九篇

2024年5月15日第四十九篇

时间:2024-05-15 22:29:44浏览次数:18  
标签:__ 15 self 第四十九 2024 lunar date layout def

今天学习了python的图形化界面的写法和matlab的语法,团队作业又进行了一次优化,基本完成了个人任务。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QCalendarWidget, QTextBrowser, QDialog, QLabel, QLineEdit, QMessageBox
from PyQt5.QtCore import QDate, Qt, QTimer, QDateTime
from cnlunar import Lunar
from datetime import datetime
import mysql.connector

class LoginDialog(QDialog):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("登录")
        layout = QVBoxLayout()

        self.usernameInput = QLineEdit()
        self.usernameInput.setPlaceholderText("请输入用户名")
        layout.addWidget(self.usernameInput)

        self.passwordInput = QLineEdit()
        self.passwordInput.setPlaceholderText("请输入密码")
        self.passwordInput.setEchoMode(QLineEdit.Password)
        layout.addWidget(self.passwordInput)

        self.loginButton = QPushButton("登录")
        self.loginButton.clicked.connect(self.login)
        layout.addWidget(self.loginButton)

        self.setLayout(layout)

    def login(self):
        # 连接到数据库
        try:
            conn = mysql.connector.connect(
                host="localhost",
                user="root",
                password="1234",
                database="loginweb"
            )

            cursor = conn.cursor()

            # 查询数据库中是否存在匹配的用户名和密码
            query = "SELECT * FROM login WHERE username = %s AND password = %s"
            cursor.execute(query, (self.usernameInput.text(), self.passwordInput.text()))

            if cursor.fetchone():
                QMessageBox.information(self, "登录成功", "登录成功!")
                self.accept()  # 验证通过,关闭对话框
            else:
                QMessageBox.warning(self, "登录失败", "用户名或密码错误!")
            cursor.close()
            conn.close()

        except mysql.connector.Error as err:
            QMessageBox.critical(self, "数据库错误", f"数据库连接错误: {err}")

class LunarCalendarWidget(QCalendarWidget):
    def paintCell(self, painter, rect, date):
        # Call the base class paintCell() to ensure proper rendering
        super().paintCell(painter, rect, date)

        # Get the Lunar date
        lunar_date = Lunar(datetime(date.year(), date.month(), date.day())).lunarDayCn

        # Draw the Lunar date within the calendar cell
        painter.drawText(rect, 0x0000, lunar_date)

class CalendarWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        layout = QVBoxLayout()

        self.calendar = LunarCalendarWidget()
        self.calendar.selectionChanged.connect(self.updateDateInfo)
        layout.addWidget(self.calendar)

        self.dateInfo = QTextBrowser()
        layout.addWidget(self.dateInfo)

        self.clock = QTextBrowser()  # Add a QTextBrowser for the clock
        layout.addWidget(self.clock)

        self.showWeekButton = QPushButton("Show Week")
        self.showWeekButton.clicked.connect(self.showWeek)
        layout.addWidget(self.showWeekButton)

        self.resetButton = QPushButton("Reset")
        self.resetButton.clicked.connect(self.resetView)
        layout.addWidget(self.resetButton)

        self.initial_range = None  # Initial display range
        self.saveInitialRange()

        self.setLayout(layout)

        # Start a QTimer to update the clock every second
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.updateClock)
        self.timer.start(1000)

    def updateDateInfo(self):
        selected_date = self.calendar.selectedDate()
        current_datetime = datetime(selected_date.year(), selected_date.month(), selected_date.day())
        lunar = Lunar(current_datetime)

        lunar_info = f"农历: {lunar.lunarYearCn} {lunar.year8Char}[{lunar.chineseYearZodiac}]年 {lunar.lunarMonthCn}{lunar.lunarDayCn}日\n"
        lunar_info += f"今日节日: {lunar.get_legalHolidays()} {lunar.get_otherHolidays()} {lunar.get_otherLunarHolidays()}\n"
        lunar_info += f"八字: {lunar.year8Char} {lunar.month8Char} {lunar.day8Char} {lunar.twohour8Char}\n"
        lunar_info += f"今日节气: {lunar.todaySolarTerms}\n"
        lunar_info += f"季节: {lunar.lunarSeason}\n"
        lunar_info += f"宜: {lunar.goodThing}\n"
        lunar_info += f"忌: {lunar.badThing}\n"

        self.dateInfo.setText(lunar_info)

    def showWeek(self):
        selected_date = self.calendar.selectedDate()
        first_day_of_week = selected_date.addDays(-selected_date.dayOfWeek())
        last_day_of_week = first_day_of_week.addDays(6)
        self.calendar.setDateRange(first_day_of_week, last_day_of_week)

    def resetView(self):
        if self.initial_range:
            self.calendar.setDateRange(*self.initial_range)

    def saveInitialRange(self):
        self.initial_range = (self.calendar.minimumDate(), self.calendar.maximumDate())

    def updateClock(self):
        # Get the current date and time
        current_date_time = QDateTime.currentDateTime().toString(Qt.DefaultLocaleLongDate)
        # Display the current date and time in the clock QTextBrowser
        self.clock.setText(current_date_time)

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        layout = QVBoxLayout()

        self.calendarWidget = CalendarWidget()
        layout.addWidget(self.calendarWidget)

        self.loginButton = QPushButton("登录")
        self.loginButton.clicked.connect(self.showLoginDialog)
        layout.addWidget(self.loginButton)

        self.weather = QLabel("Weather: 晴")
        layout.addWidget(self.weather)

        self.setLayout(layout)

        self.setWindowTitle('农历日历')
        self.setGeometry(100, 100, 800, 600)

    def showLoginDialog(self):
        login_dialog = LoginDialog()
        if login_dialog.exec_() == QDialog.Accepted:
            self.loginButton.setText("已登录")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())

 

标签:__,15,self,第四十九,2024,lunar,date,layout,def
From: https://www.cnblogs.com/xuechenhao173/p/18194839

相关文章

  • Chrome OS折腾小记 2024(PIxelbook go)
    真文韵输入法解决双拼下载并安装真文韵输入法插件配置真文韵输入法网页进入:chrome-extension://ppgpjbgimfloenilfemmcejiiokelkni/options.html或者右键插件选择“选项”进入在该页面,下载自己的输入法在chromeOS设置添加输入法->选择真文韵输入法......
  • 股票2024
    2024-05-15海南自贸区的概念一直是雷声大,雨点小。迟迟不启动也是有它原因的,第一海南岛缺人才,缺产业。目前唯一的亮点就是旅游。如果大家都不愿意去海南岛,自然就发展不起来。查了一下海南的上市公司,拿得出手的,只有金盘科技,中钨高新,钧达股份,海南机场。除海南机场跟自贸区有点关联,......
  • 5.15
    js事件学习<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>js-常见事件</title><style>table{margin:0pxauto;}</style></head>&l......
  • THUSC2024 又寄
    Day0从nj直接坐车去yy,yy好热。中午吃了kfc,晚上去万达逛了逛,群友都在面积换徽章,我没有徽章并且社恐所以就只能潜水看他们面积。Day1上午报道,下了好大的雨。明年就进E队的小朋友很早就去了,似乎排了很长时间队。我睡到8点才起来吃早饭,去的比较迟,但是还是排了很长时间......
  • VMware Workstation Pro各版本下载(2024.5.5之后)
    最近有人反映说之前的VMwareWorkstation链接无法下载VMware,索性直接分享几个常用安装包,大家可以点击链接下载。整理不易,点赞关注一下吧1.系统要求VM17:硬件要求较高,Windows10或更高版64位。VM16:硬件要求较高,Windows10或更高版64位。VM12:硬件要求低,Windows7或更高版64位......
  • 揭秘2024年最强CPU天梯图:如何挑选性价比之王
    如何简单选择适合的CPU?在组装电脑时,CPU的选择至关重要,因为它直接决定了整机的运算速度。目前市场上主要有Intel和AMD两大品牌的CPU,但如何在这两大品牌中选择适合自己的CPU呢?首先,查看CPU天梯图是一个直观的方法。这张图展示了从4代到最新的14代CPU的性能排名,位置越高代表性能越强......
  • MindSponge分子动力学模拟——自定义控制器(2024.05)
    技术背景分子动力学模拟中的控制器(Controller)可以被用于修改模拟过程中的原子坐标和原子速度等参量,从而达到控制系统特定参量的目的。例如控温器可以用于实现NVT系综,控压器可用于实现NPT系综。而在MindSponge分子动力学模拟框架下,控温控压都可以基于控制器Controller来实现。关于......
  • 安捷伦34401A原理图研究 24年-5-15
    1.原理图分为9页,如下第6页的主控使用80C192,是INTEL早期出的16位单片机,外接的256KEPROM,32KSRAM。第7页有个单片机87C51,是51单片机,主要是用来GPIB和RS232通信用第9页也有个单片机87C51,是51单片机,所以据我所知一共3个单片机。 2.ASIC定制芯片不熟悉,看不懂什么意思,......
  • 2024-05-15:用go语言,考虑一个整数 k 和一个整数 x。 对于一个数字 num, 在其二进制表示
    2024-05-15:用go语言,考虑一个整数k和一个整数x。对于一个数字num,在其二进制表示中,从最低有效位开始,我们计算在x,2x,3x等位置处设定位的数量来确定其价值。举例说明,若对于x=1,num=13,则二进制表示为000001101,对应的价值为3。又如,当x=2,num=13,二进制表示依然为000001101,但对......
  • 基于UltraScale架构的XCVU3P-3FFVC1517E XCVU3P-2FFVC1517I XCVU3P-1FFVC1517E高性能
    概述VirtexUltraScale+器件是基于14nm/16nmFinFET节点的高性能FPGA,支持3DIC技术和多种计算密集型应用。AMD第三代3DIC使用堆叠硅片互联(SSI)技术打破了摩尔定律的限制,并且实现了最高信号处理和串行I/O带宽,以满足最严格的设计要求。它还提供了一个虚拟的单片设......