Source code for pymodaq_gui.utils.widgets.spinbox

from qtpy import QtWidgets, QtGui, QtCore
from pyqtgraph.widgets.SpinBox import SpinBox


[docs] class SpinBox(SpinBox): """ In case I want to add pyqtgraph spinbox functionalities """ def __init__(self, *args, font_size=None, min_height=20, **kwargs): super().__init__(*args, **kwargs) if font_size is not None: self.set_font_size(font_size) self.setMinimumHeight(min_height)
[docs] def set_font_size(self, font_size): font = QtGui.QFont() font.setPointSize(font_size) self.setFont(font)
[docs] class QSpinBoxWithShortcut(SpinBox): """ QSpinBox but which accepts key sequences and store them as attribute For now, it does not apply to regular input such as text or numerics. Beware I could not make it run for the KeySequence Ctrl+Enter or any combination involving enter... """ def __init__(self, *args, key_sequences=("Ctrl+E",), **kwargs): super().__init__(*args, **kwargs) self.shortcut = dict() #Store shortcuts in a dictionnary for key_sequence in key_sequences: shortcut = QtWidgets.QShortcut(QtGui.QKeySequence(key_sequence), self) shortcut.setContext(QtCore.Qt.WidgetWithChildrenShortcut) self.shortcut[key_sequence] = shortcut
[docs] class QSpinBox_ro(SpinBox): def __init__(self, *args, readonly=True, **kwargs): super().__init__(*args, **kwargs) #self.setMaximum(100000) self.setReadOnly(readonly) self.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
if __name__ == '__main__': from pymodaq_gui.utils.utils import mkQApp app = mkQApp('Test Spinbox') spinbox = QSpinBoxWithShortcut(key_sequences=('Ctrl+E', 'Ctrl+Shift+E', 'Ctrl+Enter', 'Ctrl+Shift+Enter')) def print_spinbox(value): print(value) spinbox.shortcut['Ctrl+E'].activated.connect(lambda: print_spinbox(f'Ctrl+E: {spinbox.value()}')) spinbox.shortcut['Ctrl+Shift+E'].activated.connect(lambda: print_spinbox(f'Ctrl+Shift+E: {spinbox.value()}')) spinbox.shortcut['Ctrl+Shift+Enter'].activated.connect(lambda: print_spinbox(f'Ctrl+Shift+Enter: {spinbox.value()}')) spinbox.shortcut['Ctrl+Enter'].activatedAmbiguously.connect(lambda: print_spinbox(f'Ctrl+Enter: {spinbox.value()}')) spinbox.show() app.exec()