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

美男子玩编程

共 4191字,需浏览 9分钟

 ·

2021-12-12 11:21

点击上方蓝色字体,关注我们



1


QCalendar日历类



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


Qt Company中日历组件效果


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


Qt Company中时间组件效果


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_())


往期推荐



点击阅读原文,更精彩~
浏览 41
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报