Код: Выделить всё
class MediaBrowser(QListWidget):
def __init__(self, database: Database, viewtab, dir_path):
QListWidget.__init__(self)
self.log = logging.getLogger('mediahug')
self.database = database
self.viewtab = viewtab
self.setLayoutMode(QListView.Batched)
self.setBatchSize(10000)
self.setUniformItemSizes(True)
self.current_directory = dir_path
# self.current_file_widgets = []
self.thumb_loader_thread = None
self.itemSelectionChanged.connect(self.selection_change)
# Should theoretically speed things up but it does not
# self.setSizeAdjustPolicy(QListWidget.AdjustToContents)
self.setSelectionMode(QAbstractItemView.SingleSelection)
self.setViewMode(QListWidget.IconMode)
self.setResizeMode(QListWidget.Adjust)
self.setIconSize(QSize(THUMB_WIDTH, THUMB_HEIGHT))
self.load_files(dir_path)
...
...
def all_files(self):
return self.findItems('*', Qt.MatchWildcard)
def load_files(self, dir_path):
if self.thumb_loader_thread and self.thumb_loader_thread.isRunning():
self.log.info('Killing Previous Thumbnail Loading Thread')
self.thumb_loader_thread.requestInterruption()
self.thumb_loader_thread.wait(sys.maxsize)
self.log.info('Previous Thumbnail Thread Done')
self.clear()
# Load New File widgets
onlyfiles = [f for f in listdir(dir_path) if isfile(join(dir_path, f))]
for f in onlyfiles:
vid = join(dir_path, f)
self.log.debug(f"Creating File/Thumb Widget {vid}")
self.addItem(ThumbWidget(vid, self.database))
self.thumb_loader_thread = ThumbLoaderThread(self.all_files(), dir_path)
self.thumb_loader_thread.start()
Код: Выделить всё
class ThumbWidget(QListWidgetItem):
def __init__(self, filename: str, database):
QListWidgetItem.__init__(self)
self.filename = filename
self.database = database
self.setText(basename(self.filename))
standard_file_icon = QWidget().style().standardIcon(QStyle.SP_FileIcon)
self.setIcon(standard_file_icon)
self.setSizeHint(QSize(THUMB_WIDTH, THUMB_HEIGHT + FILENAME_MARGIN))
def __str__(self):
return f'Thumbnail for {self.filename}'
def load_thumb(self):
metadata = self.database.file_metadata(self.filename)
img_thumb = metadata['thumb']
if img_thumb:
img = QPixmap()
img.loadFromData(img_thumb, 'JPEG')
self.setIcon(QIcon(img))
Код: Выделить всё
self.media_scroller = QScrollArea()
self.media_scroller.setWidget(self._media_browser)
self.media_scroller.setWidgetResizable(True)
Полный код этого проекта можно найти здесь:
https. ://gitlab.com/djsumdog/mediahug/-/tree/master/mediahug/gui/viewtab
Подробнее здесь: https://stackoverflow.com/questions/790 ... e-in-pyqt5
Мобильная версия