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 ...
随机推荐
- @清晰掉 Sizeof与字符串
Sizeof与字符串 1.以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符 如在代码中写 "abc",那么编译器帮你存储的是"abc/0" 2 ...
- ACM ICPC 2011-2012 Northeastern European Regional Contest(NEERC)K Kingdom Roadmap
K: 给你n个点以及n-1的条边, 问你最少要加多少条边,使得每两个点割去一条联通的边,还可以使的这两个点连通. 有个一个结论,最少添加的边数为(叶子节点数+1)/ 2. 我们可以只考虑叶子节点数应该 ...
- 微信小程序 API 数据缓存
微信小程序 数据缓存 (类似于 cookie) wx.setStorage() 将数据存储在本地缓存中制定的 key 中.会覆盖掉原来该 key 对应的内容,数据存储生命周期跟小程序本身一致,即除用户 ...
- 506C Mr. Kitayuta vs. Bamboos
分析 代码 #include<bits/stdc++.h> using namespace std; #define int long long ],h[],now[],cnt[]; in ...
- Selenium学习之==>Xpath使用方法
一.什么是Xpath XPath是XML的路径语言,通俗一点讲就是通过元素的路径来查找到这个标签元素. 工具 Xpath的练习建议大家安装火狐浏览器后,下载插件,FireBug.由于最新版火狐不再支持 ...
- 那些堪称神器的 Chrome 插件
Chrome 的简洁快速以及丰富的插件种类使得它在国内日益盛行,帮助了我们很多 Chrome 用户提升了工作效率,而今天要给大家推荐8款实用甚至堪称神器的 Chrome 插件,希望对提升大家的工作效率 ...
- Linux iptables 防火墙常用规则
iptables 安装 yum install iptables iptables 规则清除 iptables -F iptables -X iptables -Z 开放指定的端口允许本地回环接口(即 ...
- C++:函数求阶乘(如有不好之处还请谅解)
#include<iostream> using namespace std; long long f1(int n); int main() { int n=0; cin>> ...
- python获取csv文本的某行或某列数据
#coding = 'utf-8' import csv # 使用list,只能读取列,而且是全文读取,csv.reader会自动把CSV内容生成数组 ''' df = csv.reader(open ...
- Cocos2d-X网络编程(1) 网络基本概念
网络模型 OSI层模型.TCP/IP的层模型如下所示. TCP/IP各层对应的协议如下所示. 通过初步的了解,我知道: IP协议:对应于网络层,是网络层的协议, TCP协议:对应于传输层,是传输层的协 ...