PyQt5 listWidget anpassen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Felix92
User
Beiträge: 72
Registriert: Mittwoch 7. November 2018, 17:57

Montag 22. April 2019, 20:00

Huhu und zwar habe ich jetzt schon einiges probiert allerdings bekomme ich es nicht recht hin das listWidget anzupassen :/

Die Bilder + Text sollten halt größer dargestellt werden (das wrapen klappt super)
Meine Idee war es einfach die Höhe des ListWidgets anzupassen allerdings klappt das nicht so recht.

2.Frage welche Möglichkeiten gibt es um sich aus einem String nur den Dateinamen anzeigen zu lassen ? os.path.basename(last_element) funktioniert nicht oder ich mache etwas falsch :D
Ich möchte halt anstatt dem ganzen Pfad unter dem Bild nur den Dateinamen + Endung haben.

Bild

Code:

Code: Alles auswählen

import sys

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, QVBoxLayout, QLabel, QPushButton, QListWidgetItem, QGridLayout
from PyQt5.QtCore import QObject
from PIL import Image, ImageQt

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.setSizeHint(QSize(0,200))     ListWidget anpassen 

        self.pickButton.clicked.connect(self.pickFileNames)
        self.clearButton.clicked.connect(self.clearFileNames)

    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','.JPG')):
            picture = Image.open(last_element)
            picture.thumbnail(((200,200)), Image.ANTIALIAS)
            icon = QIcon(QPixmap.fromImage(ImageQt.ImageQt(picture)))
            item = QListWidgetItem(last_element[:20] + "...", self.listWidget)
            item.setStatusTip(last_element)
            item.setIcon(icon)
        elif last_element.endswith('.mp4'):
            picture = Image.open(last_element)
            picture.thumbnail(((400,400)), Image.ANTIALIAS)
            icon = QIcon(QPixmap.fromImage(ImageQt.ImageQt(picture)))
            item = QListWidgetItem(last_element[:20] + "...", self.listWidget)
            item.setStatusTip(last_element)   
            item.setIcon(icon)
        elif last_element.endswith('.mp3'):
            pass # TO DO



    def clearFileNames(self):

        self.listWidget.clear()


def main():
    app = QApplication(sys.argv)
    window = Filemanager()
    window.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()
Vielen Dank für eure Hilfe schonmal :)
MfG Felix
Benutzeravatar
__blackjack__
User
Beiträge: 3280
Registriert: Samstag 2. Juni 2018, 10:21

Montag 22. April 2019, 23:09

Was funktioniert an `os.path.basename()` denn nicht? Warum machst Du diese `findChild()`-Aufrufe? Und in dem Code steht nirgends wie gross die Thumbnails dargestellt werden sollen. Wenn das also in der *.ui-Datei auch nicht festgelegt ist, dann fehlt das wohl.
“I am Dyslexic of Borg, Your Ass will be Laminated” -- unknown
Sirius3
User
Beiträge: 9823
Registriert: Sonntag 21. Oktober 2012, 17:20

Dienstag 23. April 2019, 08:09

In `addFileNames` wird quasi in jedem if-Block das selbe gemacht, das sollte also nur einmal im Code stehen.
Warum hängst Du immer ... an, auch wenn last_element weniger als 20 Zeichen hat?
Warum nimmst Du das letzte Element von fileNames und warum heißt das last_element statt einfach nur filename?
Antworten