zoukankan      html  css  js  c++  java
  • pyqt5日历控件(在固定日期上双击让休日字体颜色变为黑体,再次双击让日历上的黑色字体再次变为红色,退出程序,再次启动时,会显示上次的操作的结果)

    # -*- 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):
    try:
    self.workless_day_fn = open(self.workless_day_read_path, "r+")
    for line in self.workless_day_fn.readlines():
    if (line.strip(" ") not in self.workless_date_list):
    self.workless_date_list.append(line.strip(" "))
    except:
    self.workless_day_write()
    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("{} ".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_())
  • 相关阅读:
    mysql在第一次查询的时候很慢,第二次查询就比较快的原因?
    mysql的递归(使用函数)
    什么样的男人才是女人眼中最帅的男人
    面试题总结
    java的重载总结
    arduino读取GPIO数据
    electron+react项目改为typescript
    百度AI训练营笔记
    python读取文件出现ufeff问题
    大端小端
  • 原文地址:https://www.cnblogs.com/kukai/p/10766349.html
Copyright © 2011-2022 走看看