Date and time in pyqt-dynamic display and various formats

Dynamic display of time in pyqt5

Online post

'''
动态显示当前时间
QTimer:如果完成周期性任务可以使用这个
QThread:如果完成单个任务可以使用这个
多线程:用于同时完成多个任务
'''
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class Activetime(QWidget):
    #初始化
    def __init__(self):
        super(Activetime, self).__init__()
        self.initUI()
    def initUI(self):
        self.setWindowTitle("动态显示时间")
        self.resize(200,100)

        self.lable=QLabel("显示当前时间")
        self.button1=QPushButton("开始时间")
        self.button2=QPushButton("结束")
        #设置网格布局
        layout=QGridLayout()

        self.timer=QTimer()
        self.timer.timeout.connect(self.showtime)#这个通过调用槽函数来刷新时间
        layout.addWidget(self.lable,0,0,1,2)
        layout.addWidget(self.button1,1,0)
        layout.addWidget(self.button2,1,1)

        self.button1.clicked.connect(self.starttimer)
        self.button2.clicked.connect(self.endtimer)
        self.setLayout(layout)


    def showtime(self):
        time=QDateTime.currentDateTime()#获取当前时间
        timedisplay=time.toString("yyyy-MM-dd hh:mm:ss dddd")#格式化一下时间
        print(timedisplay)
        self.lable.setText(timedisplay)

    def starttimer(self):
        self.timer.start(1000)#每隔一秒刷新一次,这里设置为1000ms
        self.button1.setEnabled(False)
        self.button2.setEnabled(True)

    def endtimer(self):
        self.timer.stop()
        self.button1.setEnabled(True)
        self.button2.setEnabled(False)

if __name__=="__main__":
    app=QApplication(sys.argv)
    main=Activetime()
    main.show()
    sys.exit(app.exec_())


Insert picture description here

 self.button1.setEnabled(True)
 self.button2.setEnabled(False)

The setting here is to ensure that the button at the beginning is closed. After clicking, the mutual replacement of the start and end can also be written directly to open the software to directly display the current display time, which is to get the time directly without setting the start and end buttons.

Personal realization

Implementation requirements:

It is required to open the system to automatically obtain the local time and update it dynamically

#面板类初始化
#开始周期工作
self.timer = QTimer()
##这个通过调用槽函数来刷新时间
self.timer.timeout.connect(self.showTime)
#每隔一秒刷新一次,这里设置为1000ms
self.timer.start(1000)
#接下来是设置面板一打开是所显示的时间
#设置日期牌
self.dateTimeEdit = QtWidgets.QDateTimeEdit(self.centralwidget)
#设置时间牌
self.dateTimeEdit1 = QtWidgets.QDateTimeEdit(self.centralwidget)
#设置日期牌位置
self.dateTimeEdit.setGeometry(QtCore.QRect(870, 50, 111, 21))
#设置日期牌获得当前时间
self.dateTimeEdit.setDateTime(QtCore.QDateTime.currentDateTime())
#设置日期牌的显示格式只要当前时间的日期部分
self.dateTimeEdit.setDisplayFormat("yyyy/MM/dd")
#设置日期牌的名称
self.dateTimeEdit.setObjectName("dateTimeEdit")
#设置时间牌位置
self.dateTimeEdit1.setGeometry(QtCore.QRect(870, 70, 111, 21))
#设置时间牌获得当前时间
self.dateTimeEdit1.setDateTime(QtCore.QDateTime.currentDateTime())
#设置时间牌的显示格式只要当前时间的时间部分
self.dateTimeEdit1.setDisplayFormat("hh:mm:ss")
#设置时间牌的名称
self.dateTimeEdit1.setObjectName("dateTimeEdit1")
#在面板上显示时间牌和日期牌
self.dateTimeEdit.raise_()
self.dateTimeEdit1.raise_()

#面板类内的函数
def showTime(self):
    #与上述一致初始化的在面板上的时间一致,不过是每一秒调用一次,产生动态显示
    time = QDateTime.currentDateTime()
    self.dateTimeEdit.setGeometry(QtCore.QRect(870, 50, 111, 21))
    self.dateTimeEdit.setDateTime(QtCore.QDateTime.currentDateTime())
    self.dateTimeEdit.setDisplayFormat("yyyy/MM/dd")
    self.dateTimeEdit.setObjectName("dateTimeEdit")
    self.dateTimeEdit1.setGeometry(QtCore.QRect(870, 70, 111, 21))
    self.dateTimeEdit1.setDateTime(QtCore.QDateTime.currentDateTime())
    self.dateTimeEdit1.setDisplayFormat("hh:mm:ss")
    self.dateTimeEdit1.setObjectName("dateTimeEdit1")
    self.dateTimeEdit.raise_()
    self.dateTimeEdit1.raise_()

Insert picture description here

pyqt5 style

Returns the current date and time settings

from PyQt5 import QtCore, QtWidgets

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.setWindowModality(QtCore.Qt.WindowModal)
        Dialog.resize(690, 437)
        Dialog.setAutoFillBackground(True)
        Dialog.setSizeGripEnabled(True)
        self.calendarWidget = QtWidgets.QCalendarWidget(Dialog)
        self.calendarWidget.setGeometry(QtCore.QRect(230, 30, 431, 291))
        self.calendarWidget.setObjectName("calendarWidget")
        self.dateEdit = QtWidgets.QDateEdit(Dialog)
        self.dateEdit.setGeometry(QtCore.QRect(30, 80, 171, 22))
        self.dateEdit.setObjectName("dateEdit")
        self.dateTimeEdit = QtWidgets.QDateTimeEdit(Dialog)
        self.dateTimeEdit.setEnabled(True)
        self.dateTimeEdit.setGeometry(QtCore.QRect(10, 190, 211, 31))
        self.dateTimeEdit.setToolTip("")
        self.dateTimeEdit.setWrapping(False)
        self.dateTimeEdit.setFrame(True)   #边框可见
        self.dateTimeEdit.setReadOnly(False)    #设置只读模式
        self.dateTimeEdit.setButtonSymbols(QtWidgets.QAbstractSpinBox.UpDownArrows)
        self.dateTimeEdit.setSpecialValueText("")
        self.dateTimeEdit.setKeyboardTracking(True)
        self.dateTimeEdit.setCurrentSection(QtWidgets.QDateTimeEdit.DaySection)
        self.dateTimeEdit.setCalendarPopup(True)
        self.dateTimeEdit.setCurrentSectionIndex(3)
        self.dateTimeEdit.setTimeSpec(QtCore.Qt.LocalTime)
        self.dateTimeEdit.setObjectName("dateTimeEdit")

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_()

Set in the main file (put the code to get the current date and time in the main file to avoid code changes when the QT designer changes the interface)

-*- coding: utf-8 -*-
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5 import QtWidgets
from Ui_QDataTimeEdit import Ui_Dialog

class Dialog(QDialog, Ui_Dialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)
        self.setupUi(self)
        self.dateTimeEdit.setDateTime(QDateTime.currentDateTime())
        self.dateEdit.setDate(QDate.currentDate())


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    ui = Dialog()
    ui.show()
    sys.exit(app.exec_())

Some commonly used techniques:

self.dateTimeEdit = QtWidgets.QDateTimeEdit(self.widget)
self.dateTimeEdit.setFrame(False)  #去除边框
self.dateTimeEdit.setDate(QtCore.QDate(2018, 10, 25))  #设置日期
self.dateTimeEdit.setTime(QtCore.QTime(11, 0, 0))    #设置时间11:00
self.dateTimeEdit.setObjectName("dateTimeEdit")    #设置对象名称

"""
方式1:
from PyQt5.QtCore import QDate,QTime
##设置为当前日期
self.dateTimeEdit.setDateTime(QDate.currentDate())   
##设置为当前时间
self.dateTimeEdit.setDateTime(QTime.currentTime())   

方式2:
from PyQt5.QtCore import QDateTime
##设置当前日期和时间
self.dateTimeEdit.setDateTime(QDateTime.currentDateTime())    
"""
##同理设置dataEdit是一样的
from PyQt5.QtCore import QDate
self.dateEdit.setDate(QDate.currentDate())

Print out the date and time in different formats

from PyQt5.QtCore import QDate, QTime, QDateTime, Qt

"""返回当前日期"""
now = QDate.currentDate()
print(now)  #PyQt5.QtCore.QDate(2018, 12, 3)
print(now.toString())     #周一 12月 3 2018
print(now.toString(Qt.ISODate))     #2018-12-03
print(now.toString(Qt.DefaultLocaleLongDate))       #2018年12月3日, 星期一

"""返回当前日期和时间"""
datetime = QDateTime.currentDateTime()
print(datetime)     #PyQt5.QtCore.QDateTime(2018, 12, 3, 15, 9, 41, 976)
print(datetime.toString())    #周一 12月 3 15:09:41 2018
print(datetime.toString(Qt.ISODate))        #2018-12-03T15:09:41
print(datetime.toString(Qt.DefaultLocaleLongDate))      #2018年12月3日, 星期一 15:09:41

"""返回当前时间"""
time = QTime.currentTime()
print(time)     #PyQt5.QtCore.QTime(15, 12, 9, 980)
print(time.toString())      #15:12:09
print(time.toString(Qt.ISODate))        #15:12:09
print(time.toString(Qt.DefaultLocaleLongDate))      #15:12:09

Guess you like

Origin blog.csdn.net/lockhou/article/details/113697664