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

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

目录

1、QCalendar日历类


2、QDateTimeEdit时间类


1、QCalendar日历类

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

image.png


Qt Company中日历组件效果

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


image.png


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


image.png


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


实现代码如下所示:


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


image.png

Qt Company中时间组件效果

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


image.png


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


image.png


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


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


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


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


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


image.png


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


实现代码如下所示:


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_())
相关文章
|
26天前
|
索引 Python
python-类属性操作
【10月更文挑战第11天】 python类属性操作列举
15 1
|
27天前
|
Java C++ Python
Python基础---类
【10月更文挑战第10天】Python类的定义
19 2
WK
|
30天前
|
Python
Python类命名
在Python编程中,类命名至关重要,影响代码的可读性和维护性。建议使用大写驼峰命名法(如Employee),确保名称简洁且具描述性,避免使用内置类型名及单字母或数字开头,遵循PEP 8风格指南,保持项目内命名风格一致。
WK
11 0
|
1月前
|
程序员 开发者 Python
深度解析Python中的元编程:从装饰器到自定义类创建工具
【10月更文挑战第5天】在现代软件开发中,元编程是一种高级技术,它允许程序员编写能够生成或修改其他程序的代码。这使得开发者可以更灵活地控制和扩展他们的应用逻辑。Python作为一种动态类型语言,提供了丰富的元编程特性,如装饰器、元类以及动态函数和类的创建等。本文将深入探讨这些特性,并通过具体的代码示例来展示如何有效地利用它们。
34 0
|
1月前
|
Python
Python中的类(一)
Python中的类(一)
|
1月前
|
Python
Python中的类(一)
Python中的类(一)
|
1月前
|
Python
Python中的类(二)
Python中的类(二)
|
Java Python
Python基础 | 深浅拷贝问题、递归函数练习
在实际工作中,经常涉及到数据的传递,在数据传递使用过程中,可能会发生数据被修改的问题。为了防止数据被修改,就需要在传递一个副本,即使副本被修改,也不会影响原数据的使用。为了生成这个副本,就产生了拷贝。下面先了解一下几个概念:对象、可变类型、引用
254 0
Python基础 | 深浅拷贝问题、递归函数练习
|
Python
python——基础练习(五)
python——基础练习(五)
134 0
python——基础练习(五)
|
Python
python——基础练习(四)
python——基础练习(四)
139 0
python——基础练习(四)
下一篇
无影云桌面