
Vlt. kann mir ja jmd einen Tipp geben was im folgenden Code die einfachste Variante wäre, dass jedes Element nur einmal vorhanden sein darf also quasi wenn Datei/String bereits in Liste dann ....
Desweiteren verstehe ich nicht so recht, weshalb ich mit .getOpenFileNames nur eine Datei auswählen kann anstaat mehrere laut Doku müsste das doch möglich sein :/

Code:
Code: Alles auswählen
import sys
import os
import numpy as np
import cv2
from PyQt5 import uic
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QIcon, QPixmap, QImage
from PyQt5.QtWidgets import QApplication, QFileDialog, QWidget, QListWidget, QLabel, QPushButton, QListWidgetItem
from PyQt5.QtCore import QObject, QSize
from PIL import Image, ImageQt
from pathlib import Path
from config import Resources
class Filemanager(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
uic.loadUi(Resources.get_instance().files.filemanager, self)
self.pickButton = self.findChild(QObject,'pushButton_2')
self.clearButton = self.findChild(QObject,'pushButton_3')
self.listWidget = self.findChild(QObject,'listWidget')
self.listWidget.setDragEnabled(True)
self.listWidget.setAcceptDrops(False)
self.listWidget.setMouseTracking(True)
self.listWidget.setIconSize(QSize(100,100))
self.pickButton.clicked.connect(self.pickFileNames)
self.clearButton.clicked.connect(self.clearFileNames)
self.current_frame = 0
self.preview_list = []
def pickFileNames(self):
fileNames, _ = QFileDialog.getOpenFileNames(
self,
'QFileDialog.getOpenFileNames()',
'',
(
'All Files (*);;'
'Image Files (*.png);;'
'Sound Files(*.mp3);;'
'Movie Files (*.mp4)'
)
)
self.addFileNames(fileNames)
def addFileNames(self, fileNames):
last_element = fileNames[-1]
if last_element.endswith(('.jpg','.JPEG', '.jpeg', '.JPG','.png', '.PNG')):
picture = Image.open(last_element)
picture = picture.resize(((275,183)), Image.ANTIALIAS)
icon = QIcon(QPixmap.fromImage(ImageQt.ImageQt(picture)))
item = QListWidgetItem(os.path.basename(last_element)[:20], self.listWidget)
item.setIcon(icon)
item.setToolTip(last_element)
item.setStatusTip(last_element)
elif last_element.endswith(('.mp4', '.MP4')):
path = Resources.get_instance().images.media_symbols
video_input_path = last_element
cap = cv2.VideoCapture(str(video_input_path))
number = 0
while (number < 1):
ret, frame = cap.read()
if not ret or number == 1:
break
else:
cv2.imwrite(os.path.join(path, "video%d.jpg" % self.current_frame), frame)
filename = "video%d.jpg" % self.current_frame
self.current_frame += 1
preview_file = Path(path, filename)
self.preview_list.append(preview_file)
number += 1
cap.release()
cv2.destroyAllWindows()
element = self.preview_list[-1]
picture = Image.open(element)
picture = picture.resize(((275,183)), Image.ANTIALIAS)
icon = QIcon(QPixmap.fromImage(ImageQt.ImageQt(picture)))
item = QListWidgetItem(os.path.basename(last_element)[:20], self.listWidget)
item.setToolTip(last_element)
item.setStatusTip(last_element)
item.setIcon(icon)
elif last_element.endswith(('.mp3', '.MP3')):
path = Resources.get_instance().images.media_symbols
filename = "mp3logo.jpg"
path_to_file = Path(path, filename)
picture = Image.open(path_to_file)
picture = picture.resize(((275,183)), Image.ANTIALIAS)
icon = QIcon(QPixmap.fromImage(ImageQt.ImageQt(picture)))
item = QListWidgetItem(os.path.basename(last_element)[:20], self.listWidget)
item.setIcon(icon)
item.setToolTip(last_element)
item.setStatusTip(last_element)
else:
print("The datatype is not supported")
pass
def clearFileNames(self):
self.listWidget.clear()
def main():
app = QApplication(sys.argv)
window = Filemanager()
window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
MfG Felix