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_())
相关文章
|
2月前
|
设计模式 SQL 人工智能
Python设计模式:从代码复用到系统架构的实践指南
本文以Python为实现语言,深入解析23种经典设计模式的核心思想与实战技巧。通过真实项目案例,展示设计模式在软件开发中的结构化思维价值,涵盖创建型、结构型、行为型三大类别,并结合Python动态语言特性,探讨模式的最佳应用场景与实现方式,帮助开发者写出更清晰、易维护的高质量代码。
99 1
|
2月前
|
设计模式 人工智能 算法
Python设计模式:从代码复用到系统架构的实践指南
本文探讨了电商系统中因支付方式扩展导致代码臃肿的问题,引出设计模式作为解决方案。通过工厂模式、策略模式、单例模式等经典设计,实现代码解耦与系统扩展性提升。结合Python语言特性,展示了模块化、装饰器、适配器等模式的实战应用,并延伸至AI时代的设计创新,帮助开发者构建高内聚、低耦合、易维护的软件系统。
269 0
|
4月前
|
传感器 存储 人工智能
用通义灵码2.5打造智能倒计时日历:从零开始的Python开发体验
本文记录了使用通义灵码2.5开发倒计时日历工具的全过程,展现了其智能体模式带来的高效协作体验。从项目构思到功能实现,通义灵码不仅提供了代码生成与补全,还通过自主决策分解需求、优化界面样式,并集成MCP工具扩展功能。其记忆能力让开发流程更连贯,显著提升效率。最终成果具备事件管理、天气预报等功能,界面简洁美观。实践证明,通义灵码正从代码补全工具进化为真正的智能开发伙伴。
|
2月前
|
设计模式 人工智能 算法
python 设计模式
工厂模式是一种创建型设计模式,通过定义创建对象的接口,将实例化延迟到子类,实现对象创建与使用的分离。它包括简单工厂模式、工厂方法模式和抽象工厂模式,适用于不同复杂度的对象创建场景,提高系统灵活性和可扩展性。
|
5月前
|
人工智能 Python
[oeasy]python083_类_对象_成员方法_method_函数_function_isinstance
本文介绍了Python中类、对象、成员方法及函数的概念。通过超市商品分类的例子,形象地解释了“类型”的概念,如整型(int)和字符串(str)是两种不同的数据类型。整型对象支持数字求和,字符串对象支持拼接。使用`isinstance`函数可以判断对象是否属于特定类型,例如判断变量是否为整型。此外,还探讨了面向对象编程(OOP)与面向过程编程的区别,并简要介绍了`type`和`help`函数的用法。最后总结指出,不同类型的对象有不同的运算和方法,如字符串有`find`和`index`方法,而整型没有。更多内容可参考文末提供的蓝桥、GitHub和Gitee链接。
123 11
|
8月前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
352 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
6月前
|
存储 C语言 Python
[oeasy]python077_int类型怎么用_整数运算_integer_进制转化_int类
本文主要讲解了Python中`int`类型的应用与特性。首先回顾了`int`词根的溯源,探讨了整型变量的概念及命名规则(如匈牙利命名法)。接着分析了整型变量在内存中的存储位置和地址,并通过`type()`和`id()`函数验证其类型和地址。还介绍了整型变量的运算功能,以及如何通过`int()`函数将字符串转化为整数,支持不同进制间的转换(如二进制转十进制)。此外,文章提及了关键字`del`的使用场景,对比了Python与C语言中`int`的区别,并总结了整型与字符串类型的差异,为后续深入学习奠定基础。
112 1
|
6月前
|
设计模式 机器学习/深度学习 前端开发
Python 高级编程与实战:深入理解设计模式与软件架构
本文深入探讨了Python中的设计模式与软件架构,涵盖单例、工厂、观察者模式及MVC、微服务架构,并通过实战项目如插件系统和Web应用帮助读者掌握这些技术。文章提供了代码示例,便于理解和实践。最后推荐了进一步学习的资源,助力提升Python编程技能。
|
10月前
|
设计模式 开发者 Python
Python编程中的设计模式应用与实践感悟####
本文作为一篇技术性文章,旨在深入探讨Python编程中设计模式的应用价值与实践心得。在快速迭代的软件开发领域,设计模式如同导航灯塔,指引开发者构建高效、可维护的软件架构。本文将通过具体案例,展现设计模式如何在实际项目中解决复杂问题,提升代码质量,并分享个人在实践过程中的体会与感悟。 ####
|
9月前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。

推荐镜像

更多