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

1、QCalendar日历类

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

Qt Company中日历组件效果

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

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

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

实现代码如下所示:

```python import sys from PyQt5 import QtCore from 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控件和按钮控件,当单击“获得日期和时间"按钮时,会获得当前的日期和时间。

实现代码如下所示:

```python import sys from 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_()) ```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44079197

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值