init
This commit is contained in:
78
app/components/calendar_dialog.py
Normal file
78
app/components/calendar_dialog.py
Normal file
@@ -0,0 +1,78 @@
|
||||
import time
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
from PyQt5.QtCore import QTimer, QThread, pyqtSignal, Qt
|
||||
from PyQt5.QtGui import QIcon
|
||||
from PyQt5.QtWidgets import QApplication, QDialog, QCheckBox, QMessageBox, QCalendarWidget, QWidget, QVBoxLayout, \
|
||||
QToolButton
|
||||
|
||||
from app.ui.Icon import Icon
|
||||
|
||||
|
||||
class CalendarDialog(QDialog):
|
||||
selected_date_signal = pyqtSignal(int)
|
||||
|
||||
def __init__(self, date_range=None, parent=None):
|
||||
"""
|
||||
|
||||
@param date_range: tuple[Union[QDate, datetime.date],Union[QDate, datetime.date]] #限定的可选择范围
|
||||
@param parent:
|
||||
"""
|
||||
super().__init__(parent)
|
||||
self.setWindowTitle('选择日期')
|
||||
self.calendar = QCalendarWidget(self)
|
||||
self.calendar.clicked.connect(self.onDateChanged)
|
||||
prev_btn = self.calendar.findChild(QToolButton, "qt_calendar_prevmonth")
|
||||
prev_btn.setIcon(Icon.Arrow_left_Icon)
|
||||
next_btn = self.calendar.findChild(QToolButton, "qt_calendar_nextmonth")
|
||||
next_btn.setIcon(Icon.Arrow_right_Icon)
|
||||
self.date_range = date_range
|
||||
if date_range:
|
||||
self.calendar.setDateRange(*date_range)
|
||||
# 从第一天开始,依次添加日期到列表,直到该月的最后一天
|
||||
current_date = date_range[1]
|
||||
while (current_date + timedelta(days=1)).month == date_range[1].month:
|
||||
current_date += timedelta(days=1)
|
||||
range_format = self.calendar.dateTextFormat(current_date)
|
||||
range_format.setForeground(Qt.gray)
|
||||
self.calendar.setDateTextFormat(current_date, range_format)
|
||||
# 从第一天开始,依次添加日期到列表,直到该月的最后一天
|
||||
current_date = date_range[0]
|
||||
while (current_date - timedelta(days=1)).month == date_range[0].month:
|
||||
current_date -= timedelta(days=1)
|
||||
range_format = self.calendar.dateTextFormat(current_date)
|
||||
range_format.setForeground(Qt.gray)
|
||||
self.calendar.setDateTextFormat(current_date, range_format)
|
||||
layout = QVBoxLayout(self)
|
||||
layout.addWidget(self.calendar)
|
||||
self.setLayout(layout)
|
||||
|
||||
def set_start_date(self):
|
||||
if self.date_range:
|
||||
self.calendar.setCurrentPage(self.date_range[0].year, self.date_range[0].month)
|
||||
def set_end_date(self):
|
||||
if self.date_range:
|
||||
self.calendar.setCurrentPage(self.date_range[1].year, self.date_range[1].month)
|
||||
def onDateChanged(self):
|
||||
# 获取选择的日期
|
||||
selected_date = self.calendar.selectedDate()
|
||||
s_t = time.strptime(selected_date.toString("yyyy-MM-dd"), "%Y-%m-%d") # 返回元祖
|
||||
mkt = int(time.mktime(s_t))
|
||||
timestamp = mkt
|
||||
self.selected_date_signal.emit(timestamp)
|
||||
print("Selected Date:", selected_date.toString("yyyy-MM-dd"), timestamp)
|
||||
self.close()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
app = QApplication(sys.argv)
|
||||
# 设置日期范围
|
||||
start_date = datetime(2024, 1, 5)
|
||||
end_date = datetime(2024, 1, 9)
|
||||
date_range = (start_date.date(), end_date.date())
|
||||
ex = CalendarDialog(date_range=date_range)
|
||||
ex.show()
|
||||
sys.exit(app.exec_())
|
||||
Reference in New Issue
Block a user