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灵活自定义。