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 ...
随机推荐
- lr参数与C语言函数参数的区别
C变量不能再lr函数中使用: c变量必须定义在lr函数之前: LR参数可以在LR函数中直接当做字符串使用. LR参数是lr自己封装的一个钟对象, LR参数的表达方式:{ParamName}
- 事务的ACID属性
事务,一个操作序列,这些操作要么都执行,要么都不执行,是一个不可分割的整体. ACID为事务的四大属性 原子性(Atomic):指整个数据库事务是不可分割的工作单位.只有使据库中所有的操作执行成功,才 ...
- 文件的权利和sudoers中规定的权限哪个更大?
文件的权利和sudoers中规定的权限哪个更大? 当然是文件的权限更大!!! 这也是linux的 更安全的根本所在! 就是它的每一个文件都有严格的 rwxr--r-- 权限规定. 只有文件权限规定了的 ...
- 如何解决excel工作簿保护密码
自己的excel文档设置了“保护工作簿”密码,但是密码又忘记了,怎么办? 如果你会编写代码,那么这个问题非常好解决.Excel内置功能不能解决的事儿,自己编写一段代码或许就可以搞定了. 第一步,大家已 ...
- deepfm代码参考
https://github.com/lambdaji/tf_repos/blob/master/deep_ctr/Model_pipeline/DeepFM.py https://www.cnblo ...
- Django中Cookie和Session配置和操作
Cookie Cookie以键值对Key-Value形势进行信息的存储. Cookie基于域名安全,不同域名的Cookie是不能互相访问的 Cookie是存储在浏览器中的一段纯文本信息,建议不要存储敏 ...
- 【Spring】---属性注入
一.Spring注入属性(有参构造和[set方法]) 注意:在Spring框架中只支持set方法.有参构造方法这两种方法. 使用有参数构造方法注入属性(用的不多,但需要知道): 实体类 package ...
- 【ABAP系列】SAP ABAP 的替代和校验
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 的替代和校验 ...
- python调用java代码 java虚拟机(jvm)
1.新建com文件夹,在里面新建 fibnq.java package com; public class fibnq { public fibnq(){} public int fb(int n){ ...
- Bubble Sort(冒泡排序)
冒泡排序(英语:Bubble Sort,台湾另外一种译名为:泡沫排序)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行 ...