# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Calendar1.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
import sys
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):

def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 667)
MainWindow.setUnifiedTitleAndToolBarOnMac(True)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.calendarWidget = QtWidgets.QCalendarWidget(self.centralwidget)
self.workless_day_fn = None
self.workless_date_list = []
self.workless_day_read_path = "workless_day.txt"
# self.calendarWidget.clicked.connect(self.single_click) # 关联单击事件
self.calendarWidget.activated.connect(self.double_click) # 关联双击事件
self.calendarWidget.setGeometry(QtCore.QRect(60, 60, 481, 451))
self.calendarWidget.setFirstDayOfWeek(QtCore.Qt.Sunday)
self.calendarWidget.setGridVisible(True)
self.calendarWidget.setHorizontalHeaderFormat(QtWidgets.QCalendarWidget.LongDayNames)
self.calendarWidget.setVerticalHeaderFormat(QtWidgets.QCalendarWidget.NoVerticalHeader)
self.calendarWidget.setNavigationBarVisible(True)
self.calendarWidget.setDateEditEnabled(True)
self.calendarWidget.setDateEditAcceptDelay(1500)
self.calendarWidget.setObjectName("calendarWidget")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)

self.set_to_red_or_black()

def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Calender"))

def double_click(self):
date = self.calendarWidget.selectedDate() # 获取当前被选中的日期
date_str = str(date.toPyDate())#将日期转化为字符串
if date_str in self.workless_date_list:#如果该日期已经是红色了
self.set_to_blank()#将日历字体颜色恢复为黑体
self.workless_date_list.remove(date_str)#从列表里删除选中的日期
else:
self.set_to_red()#将日历字体设置为红色
self.workless_date_list.append(date_str)#在列表里添加选中日期
self.workless_day_write()#调用写入文件方法
  #读取文件,将文件的内容增加到列表中
def workless_day_read(self):
self.workless_day_fn = open(self.workless_day_read_path, "r+")
for line in self.workless_day_fn.readlines():
if (line.strip("\n") not in self.workless_date_list):
self.workless_date_list.append(line.strip("\n"))
self.workless_day_fn.close()
  #循环遍历列表,将列表内容写到文件中
def workless_day_write(self):
self.workless_day_fn = open(self.workless_day_read_path, "w")
for i in range(len(self.workless_date_list)):
self.workless_day_fn.write("{}\n".format(self.workless_date_list[i]))
self.workless_day_fn.close()
  
# 设置字体颜色为红色
    def set_to_red(self):  
cmd_fmt = QtGui.QTextCharFormat()
brush = QtGui.QBrush()
brush.setColor(QtGui.QColor('Red'))

cmd_fmt.setForeground(brush)
self.calendarWidget.setDateTextFormat(self.calendarWidget.selectedDate(), cmd_fmt)
  #设置字体颜色为黑色
def set_to_blank(self):
cmd_fmt = QtGui.QTextCharFormat()
brush = QtGui.QBrush()
brush.setColor(QtGui.QColor('Black'))
cmd_fmt.setForeground(brush)
self.calendarWidget.setDateTextFormat(self.calendarWidget.selectedDate(), cmd_fmt)
  
#再次启动程序时,读取上次修改的结果
    def set_to_red_or_black(self):
first_day = QtCore.QDate()
first_day.setDate(self.calendarWidget.yearShown(), self.calendarWidget.monthShown(), 1)
days = first_day.daysInMonth()
cmd_fmt = QtGui.QTextCharFormat()
brush = QtGui.QBrush()
for i in range(days):
self.workless_day_read()
date_str = str(first_day.addDays(i).toPyDate())
if date_str in self.workless_date_list:
brush.setColor(QtGui.QColor('Red'))
cmd_fmt.setForeground(brush)
self.calendarWidget.setDateTextFormat(first_day.addDays(i), cmd_fmt)


if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow() # 生成类实例对象
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄