写点什么

Python Qt GUI 设计:QCalendar 日历类和 QDateTimeEdit 时间类(基础篇—20)

  • 2021 年 12 月 01 日
  • 本文字数:2320 字

    阅读完需:约 8 分钟

Python Qt GUI设计:QCalendar日历类和QDateTimeEdit时间类(基础篇—20)

1、QCalendar 日历类

QCalendar 是一个日历控件,它提供了一个基于月份的视图,允许用户通过鼠标或键盘选择日期,默认选中的是今天的日期。也可以对日历的日期范围进行规定。

QCalendar 类中的常用方法如下表所示:

通个示例了解 QCalendar 日历类,示例效果如下所示:

示例中有日历控件和标签控件,当前选定的日期显示在标签控件中。创建 QCalendarWidget 组件,并设置该日历控件的最大日期和最小日期。从窗口组件中选定一个日期,会发射一个 QCore.QDate 信号,将此信号连接到用户定义的 showDate()槽函数。通过调用 selectedDate()方法检索所选定的日期,然后将日期对象转换为指定格式字符串并将其设置为标签控件内容。

实现代码如下所示:

import sysfrom PyQt5 import QtCorefrom PyQt5.QtGui import *from PyQt5.QtWidgets import *from PyQt5.QtCore import QDate class CalendarExample( QWidget):	def __init__(self):		super(CalendarExample, self).__init__()		self.initUI()			def initUI(self): 		self.cal =  QCalendarWidget(self)		self.cal.setMinimumDate(QDate(1980, 1, 1))		self.cal.setMaximumDate(QDate(3000, 1, 1))		self.cal.setGridVisible(True)		self.cal.move(20, 20)		self.cal.clicked[QtCore.QDate].connect(self.showDate)		self.lbl =  QLabel(self)		date = self.cal.selectedDate()		self.lbl.setText(date.toString("yyyy-MM-dd dddd"))		self.lbl.move(20, 300)		self.setGeometry(100,100,400,350)		self.setWindowTitle('Calendar 例子')			def showDate(self, date): 		self.lbl.setText(date.toString("yyyy-MM-dd dddd") ) if __name__ == '__main__':	app = QApplication(sys.argv)	demo = CalendarExample()	demo.show()	sys.exit(app.exec_())
复制代码

2、QDateTimeEdit 时间类

QDateTimeEdit 是一个允许用户编辑日期时间的控件,可以使用键盘和上、下箭头按钮来增加或减少日期时间值。

QDateTimeEdit 类中的常用方法如下表所示:

QDateTimeEdit 类中的常用信号如下表所示:

QDateTimeEdit 类中包含 QDateEdit 类和 QTimeEdit 类,QDateEdit 类用来编辑控件的日期,仅包括年、月和日;QTimeEdit 用来编辑控件的时间,仅包括小时、分钟和秒。

不要用 QDateEdit 类来设置或获取时间,也不要用 QTimeEdit 类来设置或获取日期。如果要同时操作日期时间,请使用 QDateTimeEdit 类。

设置弹出日历时要注意:用来弹出日历的类只有 QDateTimeEdit 类和 QDateEdit 类,而 QTimeEdit 类虽然在语法上可以设置弹出日历,但不起作用。

在默认情况下,如果 QDateTimeEdit 类构造时不指定日期时间,那么系统会为其设置一个和本地相同的日期时间格式,并且值为 2000 年 1 月 1 日 0 时 0 分 0 秒,也可以手动指定控件显示的日期时间。

通过示例了解 QDateTimeEdit 时间类,示例效果如下所示:

在这个例子中有 QDateTimeEdit 控件和按钮控件,当单击“获得日期和时间"按钮时,会获得当前的日期和时间。

实现代码如下所示:

import sysfrom PyQt5.QtGui import *from PyQt5.QtWidgets import *from PyQt5.QtCore import QDate,   QDateTime , QTime  class DateTimeEditDemo(QWidget):	def __init__(self):		super(DateTimeEditDemo, self).__init__()		self.initUI()			def initUI(self): 		self.setWindowTitle('QDateTimeEdit例子')		self.resize(300, 90)    		vlayout = QVBoxLayout()		self.dateEdit = QDateTimeEdit(QDateTime.currentDateTime(), self)		self.dateEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")        # 设置最小日期		self.dateEdit.setMinimumDate(QDate.currentDate().addDays(-365))         # 设置最大日期		self.dateEdit.setMaximumDate(QDate.currentDate().addDays(365)) 		self.dateEdit.setCalendarPopup( True) 		self.dateEdit.dateChanged.connect(self.onDateChanged) 		self.dateEdit.dateTimeChanged.connect(self.onDateTimeChanged) 		self.dateEdit.timeChanged.connect(self.onTimeChanged) 				self.btn = QPushButton('获得日期和时间')  		self.btn.clicked.connect(self.onButtonClick)         		vlayout.addWidget( self.dateEdit )		vlayout.addWidget( self.btn )		self.setLayout(vlayout)    	# 日期发生改变时执行			def onDateChanged(self , date):		print(date)		# 无论日期还是时间发生改变,都会执行	def onDateTimeChanged(self , dateTime ):		print(dateTime)				# 时间发生改变时执行	def onTimeChanged(self , time):		print(time)					def onButtonClick(self ):      		dateTime  = self.dateEdit.dateTime()		# 最大日期		maxDate = self.dateEdit.maximumDate() 		# 最大日期时间		maxDateTime = self.dateEdit.maximumDateTime() 		# 最大时间		maxTime = self.dateEdit.maximumTime() 		# 最小日期		minDate = self.dateEdit.minimumDate() 		# 最小日期时间		minDateTime = self.dateEdit.minimumDateTime() 		# 最小时间			minTime = self.dateEdit.minimumTime() 		 		print('\n选择日期时间'  )  			print('dateTime=%s' % str(dateTime) ) 		print('maxDate=%s' % str(maxDate) ) 		print('maxDateTime=%s' % str(maxDateTime) ) 		print('maxTime=%s' % str(maxTime) ) 		print('minDate=%s' % str(minDate) ) 		print('minDateTime=%s' % str(minDateTime) ) 		print('minTime=%s' % str(minTime) ) 		              if __name__ == '__main__':	app = QApplication(sys.argv)	demo = DateTimeEditDemo()	demo.show()	sys.exit(app.exec_())
复制代码


发布于: 3 小时前阅读数: 7
用户头像

【研究方向】物联网、嵌入式、AI、Python 2018.02.09 加入

【公众号】美男子玩编程,关注获取海量资源~

评论

发布
暂无评论
Python Qt GUI设计:QCalendar日历类和QDateTimeEdit时间类(基础篇—20)