class DirectoryWidget(QToolButton): Sg_double_clicked = Signal(str) def __init__(self): super(DirectoryWidget, self).__init__() self.timer = QTimer() self.timer.setSingleShot(True) self.clicked.connect(self.Sl_check_double_click) self.setAccessibleName('Directory') self.setIcon(QIcon(resource_path("icons/Cartella.png"))) self.setIconSize(QSize(45, 45)) self.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) @Slot() def Sl_check_double_click(self): success = False if self.timer.isActive(): time = self.timer.remainingTime() if time > 0: self.double_clicked_action() success = True self.timer.stop() if time <= 0: self.timer.start(250) if not self.timer.isActive() and not success: self.timer.start(250) def double_clicked_action(self) -> None: pass
class FileWidget(QToolButton): Sg_double_clicked = Signal() def __init__(self, file: File): super(FileWidget, self).__init__() self.timer = QTimer() self.timer.setSingleShot(True) self.clicked.connect(self.check_double_click) self.Sg_double_clicked.connect(self.Sl_on_double_click) self.setAccessibleName('File') self.name = file.get_name() self.creation_date = file.get_creation_date() self.last_modified_date = file.get_last_modified_date() self.extension = self.get_extension() self.set_icon() self.setText(self.name) def get_extension(self) -> str: if self.name.find('.') != -1: e = self.name.split(".") return e[-1] else: return "no" def set_icon(self): self.setIconSize(QSize(45, 45)) self.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) if self.extension in ["txt", "xml", "json", "docx", "xlsx"]: self.setIcon(QIcon(resource_path('icons/Txt.png'))) elif self.extension in ["mp4", "avi", "mpeg", "wmv"]: self.setIcon(QIcon(resource_path('icons/Video.png'))) elif self.extension in ["jpg", "png", "gif"]: self.setIcon(QIcon(resource_path('icons/Immagine.png'))) elif self.extension in ["mp3", "wav", "ogg"]: self.setIcon(QIcon(resource_path('icons/Audio.png'))) else: self.setIcon(QIcon(resource_path('icons/DocGenerico.png'))) def check_double_click(self): if self.timer.isActive(): time = self.timer.remainingTime() if time > 0: self.Sg_double_clicked.emit() self.timer.stop() if time <= 0: self.timer.start(250) if self.timer.isActive() is False: self.timer.start(250) @Slot() def Sl_on_double_click(self): pass
class SimpleTimer(QWidget, BaseTimer): paused = Signal() def __init__(self, parent=None): super().__init__(parent) self.timer = QTimer(self) self.timer.setSingleShot(True) self.update_timer = QTimer(self) self.setting_time = 0 self.remaining = 0 self.remain_label = QLabel('00:00', self) self.remain_label.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.remain_label.setScaledContents(True) font = QFont() font.setPointSize(86) self.remain_label.setFont(font) self.timer_edit = QSpinBox(self) self.timer_edit.setRange(1, 99) self.timer_edit.setValue(25) self.set_ui() self.set_connection() self.show() def set_ui(self): vlayout = QVBoxLayout() vlayout.addWidget(self.remain_label, alignment=Qt.AlignHCenter) vlayout.addWidget(self.timer_edit) self.setLayout(vlayout) def set_connection(self): self.timer.timeout.connect(self.stop) self.update_timer.timeout.connect(self.remain_update) def start(self): self.setting_time = self.timer_edit.value() self.timer.start(self.setting_time * 60 * 1000) self.set_remain_update() self.started.emit() def set_remain_update(self): self.remain_update() self.update_timer.start(250) def stop(self): self.reset() self.finished.emit() def abort(self): self.reset() self.timer.stop() self.aborted.emit() def pause(self): self.update_timer.stop() self.remaining = self.timer.remainingTime() self.timer.stop() self.paused.emit() def resume(self): self.timer.start(self.remaining) self.set_remain_update() self.started.emit() def reset(self): self.timer.stop() self.update_timer.stop() self.remain_label.setText('00:00') self.remaining = 0 def get_notify_message(self): remaining = self.timer.remainingTime() / 1000 return '{0} minutes have passed.'.format(self.setting_time - int(remaining/60)) def remain_update(self): remaining = self.timer.remainingTime() / 1000 self.remain_label.setText('{min:02}:{sec:02}'.format( min=int(remaining / 60), sec=int(remaining % 60))) @property def name(self): return 'Simple Timer'