PyQt5之QDateTimeEdit
QDateTimeEdit是一个允许用户编辑日期时间的控件,可以使用键盘上的上下键头按钮来增加或减少日期的时间值,QDateTimeEdit通过setDisplayFormat()函数来设置显示的日期时间格式
QDateTimeEdit类中常用方法
方法 | 描述 |
---|---|
setDisplayFormat | 设置日期的时间格式 |
yyyy:代表年份,用4为数表示 | |
MM:代表月份,取值范围01-12 | |
dd:代表日,取值范围01-31 | |
HH:代表小时,取值范围00-23 | |
mm:代表分钟,取值范围00-59 | |
ss:代表秒,取值范围00-59 | |
dateTime() | 返回编辑的日期时间 |
time() | 返回编辑的时间 |
date() | 返回编辑的日期 |
隐藏右侧按钮
dateTimeEdit.setButtonSymbols(QAbstractSpinBox.NoButtons) #隐藏右侧按钮
dateTimeEdit.setAlignment(Qt.AlignCenter) #隐藏后居中
常用信号
信号 | 描叙 |
---|---|
dateChanged | 当日期改变时发射此信号 |
dateTimeChanged | 当日期时间改变时发射此信号 |
timeChanged | 当时间发生改变时发射此信号 |
界面与逻辑分离制作方式实例
Qt designer制作ui界面,保存名为ui
各控件类和名称右边对象查看器有
pyuic转换ui文件为code
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'ui.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(503, 356)
Form.setStyleSheet("QWidget{\n"
"background-color: rgb(85, 0, 255);\n"
"}\n"
"\n"
"QDateEdit{\n"
"background-color: rgb(255, 255, 255);\n"
"}\n"
"\n"
"QTimeEdit{\n"
"background-color: rgb(255, 255, 255);\n"
"}\n"
"\n"
"QDateTimeEdit{\n"
"background-color: rgb(255, 255, 255);\n"
"}\n"
"\n"
"QLabel{\n"
"background-color: rgb(255, 255, 127);\n"
"}\n"
"\n"
"QPushButton{\n"
"background-color: rgb(255, 151, 90);\n"
"}\n"
"\n"
"QTextEdit{\n"
"color: rgb(255, 255, 255);\n"
"background-color: rgb(0, 0, 0);\n"
"}")
self.dateEdit = QtWidgets.QDateEdit(Form)
self.dateEdit.setGeometry(QtCore.QRect(120, 60, 110, 22))
self.dateEdit.setObjectName("dateEdit")
self.label = QtWidgets.QLabel(Form)
self.label.setGeometry(QtCore.QRect(20, 60, 91, 21))
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(Form)
self.label_2.setGeometry(QtCore.QRect(150, 10, 181, 31))
self.label_2.setStyleSheet("background-color: rgb(170, 255, 255);")
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(Form)
self.label_3.setGeometry(QtCore.QRect(20, 100, 91, 21))
self.label_3.setAlignment(QtCore.Qt.AlignCenter)
self.label_3.setObjectName("label_3")
self.label_4 = QtWidgets.QLabel(Form)
self.label_4.setGeometry(QtCore.QRect(20, 140, 91, 21))
self.label_4.setAlignment(QtCore.Qt.AlignCenter)
self.label_4.setObjectName("label_4")
self.timeEdit = QtWidgets.QTimeEdit(Form)
self.timeEdit.setGeometry(QtCore.QRect(120, 100, 111, 22))
self.timeEdit.setObjectName("timeEdit")
self.dateTimeEdit = QtWidgets.QDateTimeEdit(Form)
self.dateTimeEdit.setGeometry(QtCore.QRect(120, 140, 141, 22))
self.dateTimeEdit.setObjectName("dateTimeEdit")
self.showdate = QtWidgets.QLabel(Form)
self.showdate.setGeometry(QtCore.QRect(270, 60, 121, 21))
self.showdate.setText("")
self.showdate.setObjectName("showdate")
self.showtime = QtWidgets.QLabel(Form)
self.showtime.setGeometry(QtCore.QRect(270, 100, 121, 21))
self.showtime.setText("")
self.showtime.setObjectName("showtime")
self.showdatetime = QtWidgets.QLabel(Form)
self.showdatetime.setGeometry(QtCore.QRect(270, 140, 121, 21))
self.showdatetime.setText("")
self.showdatetime.setObjectName("showdatetime")
self.readdate = QtWidgets.QPushButton(Form)
self.readdate.setGeometry(QtCore.QRect(400, 60, 81, 21))
self.readdate.setObjectName("readdate")
self.readtime = QtWidgets.QPushButton(Form)
self.readtime.setGeometry(QtCore.QRect(400, 100, 81, 21))
self.readtime.setObjectName("readtime")
self.readdatetime = QtWidgets.QPushButton(Form)
self.readdatetime.setGeometry(QtCore.QRect(400, 140, 81, 21))
self.readdatetime.setObjectName("readdatetime")
self.label_5 = QtWidgets.QLabel(Form)
self.label_5.setGeometry(QtCore.QRect(20, 190, 91, 21))
self.label_5.setAlignment(QtCore.Qt.AlignCenter)
self.label_5.setObjectName("label_5")
self.textEdit = QtWidgets.QTextEdit(Form)
self.textEdit.setGeometry(QtCore.QRect(120, 190, 271, 151))
self.textEdit.setObjectName("textEdit")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.label.setText(_translate("Form", "日期控件"))
self.label_2.setText(_translate("Form", "时间日期控件测试"))
self.label_3.setText(_translate("Form", "时间控件"))
self.label_4.setText(_translate("Form", "时间日期控件"))
self.readdate.setText(_translate("Form", "读取日期"))
self.readtime.setText(_translate("Form", "读取时间"))
self.readdatetime.setText(_translate("Form", "读取日期时间"))
self.label_5.setText(_translate("Form", "状态监控"))
MainCode
#!/usr/bin/python
# -*-coding: utf-8 -*-
import sys, time
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from ui import Ui_Form #导入界面文件
class Main(QMainWindow, Ui_Form):
def __init__(self):
super(Main, self).__init__()
self.setupUi(self) #初始化界面
self.date_func() #日期初始化函数
self.time_func() #时间初始化函数
self.datetime_func() #日期时间初始化函数
self.signal_func() #信号槽链接函数
def signal_func(self):
#按钮单击读取对应控件内容加载到标签,
self.readdate.clicked.connect(self.showdate_func)
self.readtime.clicked.connect(self.showtime_func)
self.readdatetime.clicked.connect(self.showdatetime_func)
#各控件状态改变时发送信号
self.dateEdit.dateChanged.connect(lambda : self.showupdate(0) )
self.timeEdit.timeChanged.connect(lambda : self.showupdate(1) )
self.dateTimeEdit.dateChanged.connect(lambda : self.showupdate(2) )
self.dateTimeEdit.timeChanged.connect(lambda : self.showupdate(3) )
self.dateTimeEdit.dateTimeChanged.connect(lambda : self.showupdate(4) )
# 日期控件
def date_func(self):
now_day = time.strftime("%Y-%m-%d", time.localtime()) #python获取格式化日期
self.dateEdit.setDate(QDate.fromString(now_day, 'yyyy-MM-dd'))
# self.dateEdit.setDate(QDate.currentDate()) #PyQt设置显示当前日期
self.dateEdit.setDisplayFormat("yyyy-MM-dd") #设置显示格式
#读取日期按钮槽函数
def showdate_func(self):
str_date = self.dateEdit.date().toString("yyyy-MM-dd") #获取控件格式化日期
self.showdate.setText(str_date) #设置标签显示时间
#说明:"yyyy-MM-dd" 可以省略部分获取指定年、月、日
# 时间控件
def time_func(self):
now_day = time.strftime("%H:%M:%S", time.localtime()) #python获取格式化时间
self.timeEdit.setTime(QTime.fromString(now_day, 'hh:mm:ss'))
# self.timeEdit.setTime(QTime.currentTime()) #PyQt设置显示当前时间
self.timeEdit.setDisplayFormat("HH:mm:ss") #设置显示格式
#读取时间按钮槽函数
def showtime_func(self):
str_time = self.timeEdit.time().toString("hh:mm:ss") #获取控件格式化时间
self.showtime.setText(str_time)
# 说明:"hh:mm:ss" 可以省略部分获取指定时、分、秒
# 日期时间控件
def datetime_func(self):
# 设置显示当前的日期时间
now_day = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) #python获取格式化日期时间
self.dateTimeEdit.setDateTime(QDateTime.fromString(now_day, 'yyyy-MM-dd hh:mm:ss'))
# self.dateTimeEdit.setDateTime(QDateTime.currentDateTime()) # PyQt设置显示当前的日期时间
self.dateTimeEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss") #设置显示格式
#读取日期时间按钮槽函数
def showdatetime_func(self):
str_datetime = self.dateTimeEdit.dateTime().toString("yyyy-MM-dd hh:mm:ss") # 获取控件格式化日期时间
self.showdatetime.setText(str_datetime)
# 说明:"yyyy-MM-dd hh:mm:ss" 可以省略部分获取指定年、月、日、时、分、秒
# 各控件状态改变打印打印信号
def showupdate(self,num):
if num == 0:
showstr = '日期控件日期改变'
elif num == 1:
showstr = '时间控件时间改变'
elif num == 2:
showstr = '日期时间控件日期改变'
elif num == 3:
showstr = '日期时间控件时间改变'
elif num == 4:
showstr = '日期时间控件日期或时间改变'
self.textEdit.append(showstr)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = Main()
win.show()
sys.exit(app.exec_())