PyQt5: QTime
Torna all’indice degli appunti
QTime è una classe che mette a disposizione un set di metodi per la gestione dell’orario.
Oltre alla creazione di oggetti QTime è possibile effettuare comparazioni tra essi.
La creazione di un oggetto QTime può avvenire, sia passando esplicitamente al costruttore, ore, minuti, secondi e millisecondi, sia utilizzando lo static-method currenTime, che ritorna l’ora corrente di sistema:
>>> from PyQt5.QtCore import QTime >>> QTime.currentTime() PyQt5.QtCore.QTime(9, 7, 38, 84) >>> QTime(9, 8, 0, 0) PyQt5.QtCore.QTime(9, 8)
I metodi per ottenere i valori dell’oggetto QTime sono hour, minute, second, msec:
>>> ct = QTime.currentTime() >>> ct.hour() 9 >>> ct.minute() 12 >>> ct.second() 11 >>> ct.msec() 592
Per modificare manualmente l’orario, dopo la creazione dell’oggetto QTime, è possibile utilizzare il metodo setHMS(hours, minutes, seconds, milliseconds):
ct.setHMS(1, 1, 50, 50) True >>> ct.hour() 1
Con i due metodi addSecs(int), addMSecs(int) è possibile incrementare l’orario della quantità desiderata di secondi e/o msec:
>>> ct.addSecs(20) PyQt5.QtCore.QTime(1, 2, 10, 50)
Come per l’ggetto QDate, l’utilizzo di questi metodi, non modifica l’oggetto corrente, ma ne ritorna un altro. Per la modifica si utilizza il metodo setHMS(hours, minutes, seconds, milliseconds).
>>> new_time = ct.addMSecs(4500) >>> new_time PyQt5.QtCore.QTime(1, 1, 54, 550)
Quando si hanno 2 o più oggetti QTime, è possibile sapere quanti secondi o msec di differenza ci sono tra i due orari, con i metodi secsTo(time) e mSecsTo(time):
>>> ct.secsTo(new_time) 4 >>> ct.msecsTo(new_time) 4500
CONFRONTI
I confronti tra date vengono effettuati con i comuni operatori:
>>> ct < new_time True
CRONOMETRO
E’ possibile utilizzare l’oggetto QTime anche per cronometrare i millisecondi passati da un determinato evento.
I metodi utilizzabili sono:
start: avvia il cronometro;
restart: resetta il cronometro, ritornando i msec passati dal precedente avvio (start);
elapsed: ritorna i msec passati dall’ avvio (start);
>>> start_time = QTime.currentTime() >>> start_time.start() >>> start_time.elapsed() 14383 >>> start_time.restart() 23415 >>> start_time.elapsed() 8955
CONVERSIONE DA TIME A STRINGA
E’ possibile convertire un oggetto QTime in formato stringa con il metodo toString(format) dove format rappresenta il tipo di formato utilizzato per la conversione.
format può assumere i seguenti patterns:
h l’ora rappresentata senza il leading zero (0-23 o 1-12 con am/pm attivo);
hh l’ora rappresentata con il leading zero (01-23 o 01-12 con am/pm attivo);
H l’ora rappresentata senza il leading zero (0-23 anche con am/pm attivo);
HH l’ora rappresentata con il leading zero (01-23 anche con am/pm attivo);
m il minuto rappresentato senza il leading zero (0-59);
mm il minuto rappresentato con il leading zero (00-59);
s i secondi rappresentati senza il leading zero (0-59);
ss i secondi rappresentati con il leading zero (00-59);
z i millisecondi rappresentati senza il trailing zero(0-999);
zzz i millisecondi rappresentati con il trailing zero(000-999);
AP visualizza in modalità AM/PM;
ap visualizza in modalità AM/PM, ma in minuscolo;
t visualizza il time-zone (es ‘CEST’);
>>> ct = QTime.currentTime() >>> ct.toString("h") '10' >>> format = "hh:mm:ss.zzz A t" >>> ct.toString(format) '10:27:30.689 ora legale Europa occidentale'
CONVERSIONE DA STRINGA A TIME
Inversamente della situazione precedente, è possibile convertire una stringa in oggetto QTime, con il metodo fromString(string, format), dove string è la stringa dell’orario e format il tipo di formato utilizzato per la conversione.
>>> s_time = '11:28:31.100' >>> format = "hh:mm:ss.zzz" >>> new_time = QTime.fromString(s_time, format) >>> new_time PyQt5.QtCore.QTime(11, 28, 31, 100)
Il widget utilizzato per gestire l’orario è QTimeEdit.
I metodi di QTimeEdit sono i seguenti:
time(): ottiene l’orario mostrato nel widget;
setMinimumTime(QTime): definisce il valore minimo dell’orario definibile dall’utente;
setMaximumTime(QTime): definisce il valore massimo dell’orario definibile dall’utente;
minimumTime: ottiene il valore minimo impostato per il widget;
maximumTime: ottiene il valore massimo impostato per il widget;
setDisplayFormat(format): definisce il formato dell’orario utilizzato dal widget;
displayFormat: ottiene il formato dell’orario utilizzato dal widget;
from PyQt5.QtWidgets import QWidget, QApplication, QBoxLayout, QTimeEdit from PyQt5.QtCore import QTime from PyQt5.QtWidgets import QMainWindow import sys class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.setWindowTitle("QTime Example") self.central_widget = FormWidget(self) self.setCentralWidget(self.central_widget) self.resize(200, 75) class FormWidget(QWidget): def __init__(self, parent): super(FormWidget, self).__init__(parent) layout = QBoxLayout(QBoxLayout.TopToBottom) time_edit = QTimeEdit(QTime.currentTime()) layout.addWidget(time_edit, 0) self.setLayout(layout) if __name__ == '__main__': app = QApplication(sys.argv) main_window = MainWindow() main_window.show() sys.exit(app.exec_())
Con i metodi visti precedentemente possiamo affinare la visualizzazione ed il campo di utilizzo.
Usiamo il format degli esempi precedenti e limitiamo la modifica dalle 8 alle 17:
... time_edit = QTimeEdit(QTime.currentTime()) time_edit.setMinimumTime(QTime(8, 00, 00)) time_edit.setMaximumTime(QTime(17, 0, 0)) time_edit.setDisplayFormat("hh:mm:ss.zzz") ...
SEGNALI
Il segnale degno di nota, oltre a quelli soliti ereditati, è timeChanged, emesso ad ogni modifica dell’orario, da parte dell’utente, che sia un
... time_edit.timeChanged.connect(self.on_time_changed) def on_time_changed(self): time_editor = self.sender() format = time_editor.displayFormat() newtime = time_editor.time().toString(format) print("[SIG] Time has changed to %s" % newtime) print(" Minimum time set: %s" % time_editor.minimumTime()) print(" Maximum time set: %s" % time_editor.maximumTime()) print(" time format is : %s" % format) ...
Nota:
l’utilizzo di sender() è solo didattico per capire da chi arriva il segnale,
rendendo time_edit attributo dell’istanza di QWidget (self.time_edit) in fase di inizializzazione,
evita l’utilizzo del metodo sender di QWidget.
Commenti recenti