GUI学习之三十—QCalendarWidget学习总结
今天学习的是最后一个展示控件——QCalendarWidget
一.描述
QCalendarWidget提供了一个基于每月的日历控件,允许用户选择一个日期,还可以看一下里面的图示:

QCalendarWidget是基于QWidget的一个子类,不像前面所用的QDialog一样具备弹出功能,所以要好多时候都需要结合QDialog使用。
二.功能作用
1.日期范围
QCalendarWidget.setMaximumDate(self, date: typing.Union[QtCore.QDate, datetime.date])
QCalendarWidget.setMinimumDate(self, date: typing.Union[QtCore.QDate, datetime.date])
QCalendarWidget.setDateRange(self, min: typing.Union[QtCore.QDate, datetime.date], max: typing.Union[QtCore.QDate, datetime.date])
设定了范围后,如果日期超出了范围则相应日期会变灰。
2.日期编辑
日期是可以通过鼠标点击来改变的,当然也可以通过键盘来实现
QCalendarWidget.setDateEditEnabled()
这个设置默认值为True,在控件上可以直接用键盘输入,会有下面的效果

也就是可以用键盘输入日期直接跳转
在输入的过程中我们还可以通过下面的代码控制等待键盘输入的时间
QCalendarWidget.setDateEditAcceptDelay(self, delay: int) #delay的值是ms
当然也可以获取上面的值
QCalendarWidget.isDateEditEnabled() -> bool
QCalendarWidget.dateEditAcceptDelay() -> int
还可以设置当前的时间
self, date: typing.Union[QtCore.QDate, datetime.date]
我们可以通过一个按钮把日期返回到当下。
from PyQt5.Qt import *
import sys class Window(QWidget):
def __init__(self):
super().__init__()
self.resize(500,300)
self.UI_test() def UI_test(self):
self.cw = QCalendarWidget(self)
self.btn = QPushButton('test',self)
self.btn.move(250,0)
self.btn.clicked.connect(self.fun)
def fun(self):
date = QDate.currentDate()
self.cw.setSelectedDate(date) pass
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
案例——跳转到当前的日期
3.日期获取
QCalendarWidget.monthShown()-> int
QCalendarWidget.yearShown()-> int
QCalendarWidget.selectedDate() -> QtCore.QDate
要注意的是选择和展示的区别,选择是光标所选择的日期(选中后改变了年/月但是选中的日期是不会变的,变的只有展示的值)
4.格式外观
a.导航条
QCalendarWidget.setNavigationBarVisible()
QCalendarWidget.isNavigationBarVisible()
b.设置一周的第一天
默认的第一天都是周一,但国外有些地方默认是周日,那么可以按照下面的方法来设定
QCalendarWidget.setFirstDayOfWeek(self, dayOfWeek: QtCore.Qt.DayOfWeek)
Monday = ... # type: 'Qt.DayOfWeek'
Tuesday = ... # type: 'Qt.DayOfWeek'
Wednesday = ... # type: 'Qt.DayOfWeek'
Thursday = ... # type: 'Qt.DayOfWeek'
Friday = ... # type: 'Qt.DayOfWeek'
Saturday = ... # type: 'Qt.DayOfWeek'
Sunday = ... # type: 'Qt.DayOfWeek'
c.网格显示
默认情况是日历是不带网格的,可以用网格把日期隔开
QCalendarWidget.setGridVisible()
QCalendarWidget.isGridVisible() -> bool
网格的效果是这样的

d.文本格式
垂直头、水平头设置
QCalendarWidget.setHeaderTextFormat(self, format: QtGui.QTextCharFormat)
水平头的格式
QCalendarWidget.setHorizontalHeaderFormat(self, format: 'QCalendarWidget.HorizontalHeaderFormat')
# type: 'QCalendarWidget.HorizontalHeaderFormat'
NoHorizontalHeader = ... # type: 'QCalendarWidget.HorizontalHeaderFormat'
SingleLetterDayNames = ... # type: 'QCalendarWidget.HorizontalHeaderFormat'
ShortDayNames = ... # type: 'QCalendarWidget.HorizontalHeaderFormat'
LongDayNames = ... # type: 'QCalendarWidget.HorizontalHeaderFormat'
垂直头格式
QCalendarWidget.setVerticalHeaderFormat(self, format: 'QCalendarWidget.VerticalHeaderFormat')
# type: 'QCalendarWidget.VerticalHeaderFormat'
NoVerticalHeader = ... # 隐藏
ISOWeekNumbers = ... # 显示周数
修改星期字体和日期字体格式
QCalendarWidget.setDateTextFormat(self, date: typing.Union[QtCore.QDate, datetime.date], color: QtGui.QTextCharFormat) #可以修改指定的星期几的字体
QCalendarWidget.setDateTextFormat(self, date: typing.Union[QtCore.QDate, datetime.date], color: QtGui.QTextCharFormat) #可以修改指定的date的字体
5.选中
QCalendarWidget.setSelectedDate(self, date: typing.Union[QtCore.QDate, datetime.date])
QCalendarWidget.setSelectionMode(self, mode: 'QCalendarWidget.SelectionMode') #日期选择模式
# type: 'QCalendarWidget.SelectionMode'
NoSelection = ... # 日期无法选择
SingleSelection = ... # 只能单选
无法选择主要用于为用户展示日期,并且无法更改。
三.常用方法
QCalendarWidget.showToday() #展示当日,只负责展示当页,不负责选中
QCalendarWidget.showSelectedDate()
QCalendarWidget.showNextMonth()
QCalendarWidget.showNextYear()
QCalendarWidget.showPreviousMonth()
QCalendarWidget.showPreviousYear()
QCalendarWidget.setCurrentPage(self, year: int, month: int)
要注意的是show只是负责展示日、月或年的那一页,而不附加选中的效果。
四.信号
QCalendarWidget.activated(self, date: typing.Union[QtCore.QDate, datetime.date]) #回车或双击时能触发,参数为日期
QCalendarWidget.clicked(self, date: typing.Union[QtCore.QDate, datetime.date]) #点击时触发,参数为日期
QCalendarWidget.currentPageChanged(self, year: int, month: int) #当前页面发生变化,参数为新的的页面(年和月)
QCalendarWidget.selectionChanged() #选中的日期发生变化,无参数
点击触发和选择触发有个区别,点击触发只有鼠标点击时候触发,而选中触发可以通过代码选中或键盘输入。
GUI学习之三十—QCalendarWidget学习总结的更多相关文章
- GUI学习之三十四——QSS样式表
今天是一个大课题:QSS样式表 一.概念: QSS是Qt Style Sheet——Qt样式表,是用来自定义控件外观的一种机制;可以把他类比成CSS,但是不及其功能强大. 二.使用: 我们做一个模板, ...
- GUI学习之三十二—QLCDNumber学习总结
下面我们来总结一下QLCDNumber的用法 一.描述 QLCDNumber主要用来展示LCD样式的数字,他可以显示几乎任何大小的数字,可以显示十进制,十六进制,八进制或二进制数,也可以展示一些简单的 ...
- GUI学习之三十一—QLabel学习总结
前面所有的控件都是归于输入控件的,下面我们要总结下展示控件的用法.首先要将的就是最常用的QLabel. 一.描述 标签控件(QLabel)提供了文本或图像显示的功能,可以用来显示 普通文本 数字 富 ...
- GUI学习之三十三——QProgressBar学习总结
今天总结的是QProgressBar的使用方法 一.描述 提供了一个水平或垂直的进度条,用于向用户提供操作进度的指示,用户也可以从进度条看出来程序是否正在运行. 二.功能作用 1.设置范围和当前值 Q ...
- 杨其菊201771010134《面向对象程序设计(java)》第十四周学习总结
第十四周学习总结 第一部分:理论知识 理论知识:本周学习Swing用户界面 内容:Swing与模型-视图-控制器设计模式:布局管理概述:文本输入 :选择组件:菜单:复杂的布局管理:对话框: 第二部分: ...
- 201671010140. 2016-2017-2 《Java程序设计》java学习第十五周
java学习第十五周 Java的GUI界面设计,框架以及主要部件填充,归置,布局管理,在第十一章和第十二章进行了系统的学习,在这两章的知识奠基下,可以简单的构造一个GUI用户界面,在两周的学习后,可以 ...
- Java基础学习总结(56)——学java必知十大学习目标
诞生至今已有20年的Java,现在依然有很多人使用.回顾过去十五年的成果,Java一直是数一数二的.Java已经成为世界范围内应用最为广泛的编程语言之一.那么在学java的时候你知道到底要学什么吗?一 ...
- 201871010111-刘佳华《面向对象程序设计(java)》第十四周学习总结
201871010111-刘佳华<面向对象程序设计(java)>第十四周学习总结 实验十二 Swing图形界面组件(一) 实验时间 2019-11-29 第一部分:基础知识总结 1.设计 ...
- 201271050130-滕江南-《面向对象程序设计(java)》第十四周学习总结
201271050130-滕江南-<面向对象程序设计(java)>第十四周学习总结 项目 内容 这个作业属于哪个课程 <任课教师博客主页链接> https://www.cnbl ...
随机推荐
- 将数据库中带出的列,在gridview中影藏起来
前台增加事件:OnRowCreated="GridView1_RowCreated" protected void GridView1_RowCreated(object send ...
- 三、Appium-python-UI自动化之元素定位uiautomatorviewer
uiautomatorviewer是android-sdk自带的一个元素定位工具,非常简单好用,使用uiautomatorviewer,可以检查一个应用的UI来查看应用的布局和组件以及相关的属性. 一 ...
- 破解Excel 工作表/薄密码
新建excel 在右上角的ThisWorkbook右键插入模块复制下列CODE. Option Explicit Public Sub AllInternalPasswords()' Breaks w ...
- ffmpeg mp4 to wmv and wmv to mp4
//大小=>变小ffmpeg -i 1.mp4 -b:v 2M -vcodec msmpeg4 -acodec wmav2 1_mp4.wmv//大小=>变大ffmpeg -i 1.mp4 ...
- Nginx1.8源码包编译安装
1.下载解压Nginx,为方便管理下载包一般将下载包放在指定目录下 ,即/usr/local/src/下. wget http://nginx.org/download/nginx-1.8.0.tar ...
- 2.k8s.Pod生命周期,健康检查
#Pod生命周期,健康检查 pod创建过程 Init容器 就绪探测 存活探测 生命周期钩子 #Pod创建过程 master节点:kubectl -> kube-api -> kubenle ...
- Elasticsearch入门(二)
基础概念 Elasticsearch有几个核心概念,从一开始理解这些概念会对整个学习过程有莫大的帮助. 接近实时(NRT) Elasticsearch是一个接近实时的搜索平台.这意味着,从索引一个文档 ...
- js中 json对象的转化 JSON.parse()
JSON.parse() 方法用来解析JSON字符串,json.parse()将字符串转成json对象.构造由字符串描述的JavaScript值或对象.提供可选的reviver函数用以在返回之前对所得 ...
- HDU 3466 Proud Merchants 带有限制的01背包问题
HDU 3466 Proud Merchants 带有限制的01背包问题 题意 最近,伊萨去了一个古老的国家.在这么长的时间里,它是世界上最富有.最强大的王国.因此,即使他们的国家不再那么富有,这个国 ...
- P1969积木大赛
这是2018与2013提高组的真题,可怕,,原题出了两年,是个纯模拟. 读完题后就想写一个朴素的模拟,先遍历层数,再把达到层数的宽度#存起来,再判断是否连续,如果不连续ans++,然后每一次循环都要初 ...