PyQt5: QDoubleSpinBox
Torna all’indice degli appunti
La classe QDoubleSpinBox crea un widget per la regolazione di un numero decimale, o mediante le freccette regolatrici, o scrivendo direttamente nella entry dedicata.
E’ praticamente identico al widget QSpinBox, che però gestisce i numeri interi.
Le funzionalità dell’oggetto QDoubleSpinBox, sono ereditate dalla classe QAbstractSpinBox.
Per creare l’oggetto double_spinbox, si utilizza il costruttore è QDoubleSpinBox:
>>> from PyQt5.QtWidgets import QApplication, QDoubleSpinBox >>> app = QApplication([]) >>> double_spinbox = QDoubleSpinBox()
Di default il valore del range minimo e massimo dello double_spinbox è 0.0-99.99.
Questi valori sono reperibili con i due metodi minimum e maximum:
>>> double_spinbox.minimum() 0.0 >>> double_spinbox.maximum() 99.99
Per settare un range differente, si utilizzano i metodi setMinimum(minimum), setMaximum(maximum), o in un colpo solo setRange(minimum, maximum):
>>> double_spinbox.setMinimum(5.0) >>> double_spinbox.setMaximum(300.0) >>> double_spinbox.minimum() 5.0 >>> double_spinbox.maximum() 300.0
Il valore sul quale si posizionerà il double_spinbox, è settabile con il metodo setValue(value) e ottenibile con value:
>>> double_spinbox.setValue(50) >>> double_spinbox.value() 50.0
REGOLAZIONE double_spinbox DA TASTIERA
I tasti utilizzabili da tastiera per regolare lo double_spinbox sono:
frecce su/giù: aggiustano il valore dello double_spinbox dello step definito con il metodo setSingleStep(step);
Pag Down/Pag Up: aggiustano il valore del double_spinbox dello step definito con il metodo setPageStep(step);
Home: porta il double_spinbox al valore minimo, definito con il metodo setMinimum(minimum);
End: porta il double_spinbox al valore massimo, definito con il metodo setMaximum(maximum);
REGOLAZIONE DIAL DA MOUSE
Se usiamo la rotella del mouse per regolare lo double_spinbox, il valore incrementato sarà quello determinato con il metodo setSingleStep(step).
Il valore di default dello scroll, è reperibile dall’istanza della classe QStyleHints, classe che permette di accedere a specifici settaggi relativi alla piattaforma corrente. L’istanza di tale classe è ottenibile con il metodo styeHints dell’oggetto QApplication.
>>> from PyQt5.QtWidgets import QApplication >>> app = QApplication([]) >>> hints = app.styleHints() >>> hints.wheelScrollLines() 3
DECIMALI
Di default, il double_spinbox gestisce 2 decimali. Per modificare questo numero, si utilizza il metod setDecimals(num) e per ottenere il numero di decimali utilizzati, si utilizza il metodo
decimals:
>>> double_spinbox.setValue(50.55555555) >>> double_spinbox.value() 50.56 >>> double_spinbox.decimals() 2 >>> double_spinbox.setDecimals(5) >>> double_spinbox.setValue(50.55555555) >>> double_spinbox.value() 50.55556
Di seguito il codice che crea il widget:
from PyQt5.QtWidgets import QMainWindow from PyQt5.QtWidgets import (QWidget, QApplication, QVBoxLayout, QDoubleSpinBox) import sys class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.setWindowTitle("QDoubleSpinBox Example") self.central_widget = FormWidget(parent=self) self.setCentralWidget(self.central_widget) self.resize(200, 50) class FormWidget(QWidget): def __init__(self, parent): super(FormWidget, self).__init__(parent) layout = QVBoxLayout() self.setLayout(layout) double_spinbox = QDoubleSpinBox() double_spinbox.setRange(0, 300) double_spinbox.setValue(50) double_spinbox.setSingleStep(0.5) layout.addWidget(double_spinbox) if __name__ == '__main__': app = QApplication(sys.argv) main_window = MainWindow(parent=None) main_window.show() sys.exit(app.exec_())
PREFISSO E SUFFISSO
Ovviamente è possibile settare un prefisso ed un suffisso per il valore visualizzato all’interno dello double_spinbox, con i metodi:
setPrefix(prefix): setta il prefisso indicato dalla stringa prefix;
setSuffix(suffix): setta il suffisso indicato dalla stringa suffix;
Per ottenere gli eventuali prefissi e suffissi dello double_spinbox, si utilizzano invece i metodi: prefix e suffix.
... class FormWidget(QWidget): def __init__(self, parent): ... double_spinbox.setPrefix("Price:") double_spinbox.setSuffix("$") double_spinbox.setSingleStep(2) layout.addWidget(double_spinbox) ...
SEGNALI
Come per lo spinbox, l’unico segnale da tenere in considerazione nelle double_spinbox, è:
valueChanged: Emesso qualdo il valore dello double_spinbox viene modificato;
Commenti recenti