dynamische Bild-Anzeige

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Octarock
User
Beiträge: 25
Registriert: Dienstag 3. April 2018, 01:21

Hallo,

ich bin ein kompletter Neuling in Sachen PyQt hab aber schon so ein zwei Sachen gemacht. Ich habe nur das Problem, dass ich Bilder aus einen Ordner anzeigen will aber im Vorhinein nicht weiß, wie viele Bilder sich Ordner befinden (max. 6 Bilder).
Ich schaffe es nicht einmal einfach nur ein Bild anzuzeigen, obwohl ich simpelste Beispiele aus dem Internet hergenommen habe wie z.B:

Code: Alles auswählen

from PyQt5.QtWidgets import QLabel, QMainWindow, QApplication
from PyQt5.QtGui import QPixmap
import sys


class Menu(QMainWindow):

    def __init__(self):
        super().__init__()
        self.setWindowTitle("Title")
        label = QLabel(self)
        pixmap = QPixmap('image.jpeg')
        label.setPixmap(pixmap)
        self.resize(pixmap.width(), pixmap.height())
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Menu()
    sys.exit(app.exec_())
und ja das Bild heißt image.jpeg und befindet sich im selben Verzeichnis.
Ich freue mich über jede Antwort :)

MFG
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das sich das Bild im selben Verzeichnis befindet mag ja sein, reicht aber nicht aus. Relative Pfade werden nicht bezüglich der Python Datei aufgelöst. Sondern bezüglich des working Directory. Und wo das steht kommt darauf an, wie du das Skript überhaupt startest.

Um sicher zu gehen, gib den VOLLEN Pfad zum Bild an. Unter Windows dabei auf die \-escapes achten.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Octarock: Da fehlt die Verbindung zwischen dem `label` und dem Fenster, also der Aufruf der sagt was im Fenster angezeigt werden soll, beziehungsweise dass das `label` im Fenster angezeigt werden soll. Der `resize()`-Aufruf ist dann auch überflüssig, weil das Fenster automatisch so gross ist, dass das Label komplett sichtbar ist.

Sonstiges: Der `show()`-Aufruf gehört nicht in die `__init__()`. `ex` ist kein guter Name. Und der Code im ``if __name__ == …:``-Zweig gehört in eine Funktion damit er keine globalen Variablen definiert.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Octarock
User
Beiträge: 25
Registriert: Dienstag 3. April 2018, 01:21

__deets__ hat geschrieben: Dienstag 16. April 2019, 19:52 Das sich das Bild im selben Verzeichnis befindet mag ja sein, reicht aber nicht aus. Relative Pfade werden nicht bezüglich der Python Datei aufgelöst. Sondern bezüglich des working Directory. Und wo das steht kommt darauf an, wie du das Skript überhaupt startest.

Um sicher zu gehen, gib den VOLLEN Pfad zum Bild an. Unter Windows dabei auf die \-escapes achten.
Ich habe es mal mit dem vollen Pfad probiert 'C:\\Users\\xxx\\Desktop\\image.jpeg '. Ich bin mir jedoch nicht sicher, ob "\\" die richtige Lösung war um nicht Probleme beim einfachen escape zu haben.
__blackjack__ hat geschrieben: Dienstag 16. April 2019, 20:02 @Octarock: Da fehlt die Verbindung zwischen dem `label` und dem Fenster, also der Aufruf der sagt was im Fenster angezeigt werden soll, beziehungsweise dass das `label` im Fenster angezeigt werden soll.
wie mache ich das ?
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das steht in der Qt-Dokumentation zu `QMainWidget`.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Octarock
User
Beiträge: 25
Registriert: Dienstag 3. April 2018, 01:21

Nett das du antwortest, aber das wo es steht, bringt mir echt nichts, wenn dieses Thema für mich Neuland ist und die Kapitel sich über 20 Seiten erstrecken. Außerdem gibt es kein Kapitel, welches "QMainWidget" heißt! Wenn mich jemand etwas fragt, sag ich doch auch nicht "Ah ja das weiß ich, kannst du im Buch xy nachlesen das Kapitel müsste irgendwie so ... heißen" Das ist hart unkonstruktiv und wie gesagt so gut wie gar nicht hilfreich.
Ich habe das Problem mit dem Bildanzeigen jetzt gelöst (mit __deets__ Hilfe).
Wie realisiere ich das mit der flexiblen Label-Anzahl und der dazugehörigen möglichst größten Ansicht der Bilder. (z.B. bei 3 Bildern sollen diese in einer Reihe dargestellt werden, sobald es aber mehr werden soll eine zweite Reihe angefangen werden.)
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Octarock: Ich weiss nicht ob ich es ”Kapitel” nennen würde, aber es gibt in der Qt-Dokumentation einen Seite, die die Überschrift `QMainWindow Class` trägt. Es ist nicht unkonstruktiv auf die Dokumentation zu verweisen, denn was denkst Du denn warum die geschrieben wurde und wo __deets__ und ich nachlesen wenn wir etwas nicht wissen? Und man muss auch keine 20 Seiten lesen, denn schon nach der Lektüre der ersten drei, recht kurzen Absätze der Detailbeschreibung von `QMainWindow` hat man das Wissen was hier benötigt wird. Dich auf die Dokumentation zu verweisen ist Hilfe zur Selbsthilfe. Und die Qt-Dokumentation ist qualitativ ziemlich gut.

Das mit den Bilderlabeln klingt danach als müsstest Du Dir Deinen eigenen Layout-Manager schreiben. Einstiegspunkt dafür wäre wohl „Layout Management“ in der Qt-Dokumentation…
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na gleich selbst schreiben wohl nicht. Aber benutzen. Klingt nach https://doc.qt.io/qt-5/qgridlayout.html

Und 20 Seiten Doku empfohlen zu bekommen aus 1000000 Seiten, die man in seiner Ahnungslosigkeit sonst durchforstet hätte ist sehr wohl hilfreich. Es ist halt nicht vorgekaut.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@__deets__: Aus irgendwelchen Gründen hatte ich den Eindruck es sollte flexibler sein, so wie das QIconView das es bei Qt3 noch gab, zusätzlich mit Bildern die sich in der Grösse dem Platz anpassen und erst unter einer bestimmten Grösse neue Zeilen anfangen. Keine Ahnung wo ich den Eindruck her hatte. 🤷
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten