PyQt5 QCalendarWidget – 激活的信号

  • Post category:Python

PyQt5是一个Python语言编写的图形用户界面(GUI)工具包,可以轻松地创建丰富、可扩展、易于维护的图形界面应用程序。其中QCalendarWidget是PyQt5中的一个日历控件,可以用于选择日期或日期范围,也支持多种自定义样式。在使用QCalendarWidget时,我们可以使用“激活的信号”来监听用户在控件上进行的各种操作。

QCalendarWidget的激活的信号

QCalendarWidget中的激活信号是指用户在控件上进行操作时所发送的信号,如单击日期、使用键盘或鼠标进行导航等。QCalendarWidget提供了多个激活信号,可以通过连接到这些信号来实现按需处理用户交互行为的操作。

QCalendarWidget中最常用的激活信号有两种:clicked()activated()

  • clicked(): 用户单击日期时发送的信号。
  • activated(): 用户选择日期时(在选定日期并关闭控件之前)发送的信号。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QCalendarWidget, QVBoxLayout, QLabel

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

    def initUI(self):
        vbox = QVBoxLayout(self)

        cal = QCalendarWidget(self)
        cal.clicked[QDate].connect(self.showDate)
        cal.activated[QDate].connect(self.showDate)

        self.lbl = QLabel(self)
        date = cal.selectedDate()
        self.lbl.setText(date.toString())

        vbox.addWidget(cal)
        vbox.addWidget(self.lbl)

        self.setGeometry(300, 300, 350, 300)
        self.setWindowTitle('Calendar Widget')
        self.show()

    def showDate(self, date):
        self.lbl.setText(date.toString())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = CalendarWidget()
    sys.exit(app.exec_())

上述代码创建了一个基于QCalendarWidget和QLabel的窗口部件,使用两个激活信号clicked()activated()来显示选择的日期。当用户单击或选择日期时,会自动更新标签中的文本。

示例代码:自定义QCalendarWidget的样式

QCalendarWidget支持自定义样式,可以通过QSS来改变其外观。以下示例代码演示了如何使用QSS来改变QCalendarWidget的样式。

import sys
from PyQt5.QtWidgets import QApplication, QCalendarWidget
from PyQt5.QtCore import QDate

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

    def initUI(self):
        # 修改背景色和前景色
        self.setStyleSheet("QWidget { background-color: #f5f5f5; color: #333 }")
        # 修改悬浮日历框的样式
        self.setStyleSheet("QToolTip { background-color: darkkhaki; border: black solid 1px }")
        self.setGeometry(300, 300, 350, 300)
        self.setWindowTitle('Calendar Widget')

        # 设置默认选中的日期
        self.setSelectedDate(QDate.currentDate())

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

上述代码创建了一个自定义了样式的QCalendarWidget,并设置默认选中当前日期。通过设置QSS样式表,我们修改了控件的背景色、前景色和悬浮日历框的样式。这是一个简单示例,更复杂的样式可以通过QSS灵活自定义。