class Slider(): def update_offset(self, pos): offset = round(pos, 2) return offset def __init__(self, tool, text, tooltip, precision, minimal, maximal, interval): self.tool = tool self.scale = precision self.name_label = QLabel(text) self.name_label.setAlignment(Qt.AlignLeft) if not tooltip == None: self.name_label.setToolTip(tooltip) self.offset_edit = QDoubleSpinBox() self.offset_edit.setRange(minimal, maximal) self.offset_edit.setSingleStep(precision) self.offset_edit.setDecimals(2) self.offset_edit.setAlignment(Qt.AlignRight) self.offset_edit.valueChanged.connect( lambda pos: self.slider.setSliderPosition( self.update_offset(pos) / self.scale)) self.slider = QSlider(Qt.Horizontal) self.slider.setRange(minimal / self.scale, maximal) self.slider.setTickInterval(interval / self.scale) self.slider.setTickPosition(QSlider.TicksAbove) self.slider.valueChanged.connect(lambda pos: self.offset_edit.setValue( self.update_offset(pos * self.scale))) self.update_offset(0)
def createDoubleSpinBox(): spinbox = QDoubleSpinBox() spinbox.setDecimals(3) spinbox.setValue(0.000) spinbox.setAlignment(Qt.AlignCenter) return spinbox
def _gui(self): layout = QVBoxLayout() self.setLayout(layout) slider_layout = QHBoxLayout() layout.addLayout(slider_layout) slider = ClickSlider(self) slider.setOrientation(Qt.Horizontal) slider.valueChanged.connect(self._slider_changed) slider_layout.addWidget(slider) self.slider = slider max_time = QLabel(self) self.max_time = max_time max_time.setText('--:--') slider_layout.addWidget(max_time) form = QFormLayout() layout.addLayout(form) time = QTimeEdit(self) time.setDisplayFormat('mm:ss.zzz') time.setAlignment(Qt.AlignRight) time.timeChanged.connect(self._edit_time_changed) self.time = time form.addRow(QLabel('Time', self),time) speed = QDoubleSpinBox(self) speed.setMinimum(0.1) speed.setMaximum(2.0) speed.setSingleStep(0.1) speed.setValue(1) speed.setAlignment(Qt.AlignRight) self.speed = speed speed.valueChanged.connect(self._speed_changed) form.addRow(QLabel('Speed', self), speed) playback = QHBoxLayout() layout.addLayout(playback) back_fast = QToolButton(self) playback.addWidget(back_fast) abf = QAction('<<', back_fast) abf.setShortcut(QKeySequence(Qt.Key_F1)) abf.triggered.connect(self.back_fast) back_fast.setDefaultAction(abf) back = QToolButton(self) playback.addWidget(back) ab = QAction('<', back) ab.setShortcut(QKeySequence(Qt.Key_F2)) ab.triggered.connect(self.back) back.setDefaultAction(ab) play = QToolButton(self) playback.addWidget(play) self.play_button = play play.setCheckable(True) play.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) ap = QAction('Play', play) ap.setShortcut(QKeySequence(Qt.Key_F5)) ap.triggered.connect(self.play) play.setDefaultAction(ap) forward = QToolButton(self) playback.addWidget(forward) af = QAction('>', forward) af.setShortcut(QKeySequence(Qt.Key_F3)) af.triggered.connect(self.forward) forward.setDefaultAction(af) forward_fast = QToolButton(self) playback.addWidget(forward_fast) aff = QAction('>>', forward_fast) aff.setShortcut(QKeySequence(Qt.Key_F4)) aff.triggered.connect(self.forward_fast) forward_fast.setDefaultAction(aff) speed_up = QAction('Speed up', forward_fast) speed_up.setShortcut(QKeySequence(Qt.Key_F7)) speed_up.triggered.connect(self.speed.stepUp) speed_down = QAction('Speed down', forward_fast) speed_down.setShortcut(QKeySequence(Qt.Key_F6)) speed_down.triggered.connect(self.speed.stepDown) self.utils = [ slider, back_fast, back, play, forward, forward_fast, time, speed ] self.playback_actions = [abf, ab, ap, af, aff, speed_down, speed_up] self.set_enabled_utils(False) self.prevent = False self.timer = QTimer(self) self.timer.timeout.connect(self._update) self.timer.start(1) self.player = None
def _add_record_view(self, record: PatientBoneAgeRecord): row = self.rowCount() self.insertRow(row) self._records_rows[record] = row name = '' if record.image is None else record.image.path.stem name_item = QTableWidgetItem(name) name_item.setTextAlignment(Qt.AlignCenter) # Add the |record| reference to the |name_item| name_item.setData(TableItemDataRole.RECORD_REF, record) self.setItem(row, self.column_number(TableNameColumn), name_item) gender_widget = GenderWidget(embedded=True) gender_widget.man = record.male gender_widget.gender_changed.connect( partial(self._on_gender_changed, record)) record.male_changed.connect( partial(self._on_record_male_changed, gender_widget)) self.setCellWidget(row, self.column_number(TableGenderColumn), gender_widget) birthdate_edit_widget = DateEditWidget(record.birthdate, embedded=True) birthdate_edit_widget.dateChanged.connect( partial(self._on_birthdate_changed, record)) self.setCellWidget(row, self.column_number(TableBirthdateColumn), birthdate_edit_widget) image_date_edit_widget = DateEditWidget(record.image_date, embedded=True) image_date_edit_widget.dateChanged.connect( partial(self._on_image_date_changed, record)) self.setCellWidget(row, self.column_number(TableImageDateColumn), image_date_edit_widget) age_in_image_item = QTableWidgetItem() age_in_image_item.setFlags(age_in_image_item.flags() & ~Qt.ItemIsEditable) age_in_image_item.setTextAlignment(Qt.AlignCenter) record.age_in_image_changed.connect( partial(self._set_age_to_table_item, age_in_image_item)) self.setItem(row, self.column_number(TableAgeInImageColumn), age_in_image_item) bone_age_item = QTableWidgetItem() bone_age_item.setFlags(bone_age_item.flags() & ~Qt.ItemIsEditable) record.bone_age_changed.connect( partial(self._set_age_to_table_item, bone_age_item)) record.skeletal_development_rate_changed.connect( partial(self._on_skeletal_development_rate_changed, record)) self.setItem(row, self.column_number(TableDenseNetBoneAgeColumn), bone_age_item) self._update_bone_age_table_item_foreground(record) height_spin_box = QDoubleSpinBox() height_spin_box.setAlignment(Qt.AlignCenter) height_spin_box.setFrame(False) height_spin_box.setDecimals(1) height_spin_box.setMaximum(300) self._set_height_to_table_item_widget(height_spin_box, record.height) record.height_changed.connect( partial(self._set_height_to_table_item_widget, height_spin_box)) height_spin_box.valueChanged.connect( partial(self._on_height_table_item_widget_value_changed, record)) self.setCellWidget(row, self.column_number(TableHeightColumn), height_spin_box) max_height_item = QTableWidgetItem() max_height_item.setFlags(max_height_item.flags() & ~Qt.ItemIsEditable) max_height_item.setTextAlignment(Qt.AlignCenter) self._set_max_height_to_table_item(max_height_item, record.max_height) record.max_height_changed.connect( partial(self._set_max_height_to_table_item, max_height_item)) self.setItem(row, self.column_number(TableMaxHeightColumn), max_height_item) self._update_age_column_contents_for_row(row)