PySide6で画像ファイルをドラックアンドドロップで表示する【QPixmap】

python コンピュータ
python

QPixmapのサンプルです。

import sys
from PySide6.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout
from PySide6.QtGui import QPixmap
from PySide6.QtCore import Qt

class ImageLabel(QLabel):
    def __init__(self):
        super().__init__()
        self.setAlignment(Qt.AlignCenter)
        self.setAcceptDrops(True)  # ドロップを受け付けるように設定

    def dragEnterEvent(self, event):
        if event.mimeData().hasUrls():  # URLを持っているか確認
            event.acceptProposedAction()  # ドロップを受け付ける

    def dropEvent(self, event):
        for url in event.mimeData().urls():
            file_path = url.toLocalFile()  # ファイルパスを取得
            if file_path.lower().endswith(('.png', '.jpg', '.jpeg', '.gif')):  # 画像ファイルか確認
                pixmap = QPixmap(file_path)  # 画像を読み込む
                if not pixmap.isNull():  # 画像が正常に読み込めたか確認
                    self.setPixmap(pixmap.scaled(self.width(), self.height(), Qt.KeepAspectRatio))  # 画像を表示
                    break  # 最初の画像のみ表示

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("画像ドラッグ&ドロップ")

        # ウィンドウサイズの設定
        self.setGeometry(0, 0, 640, 400)

        self.image_label = ImageLabel()  # ImageLabelを作成

        layout = QVBoxLayout()  # レイアウトを作成
        layout.addWidget(self.image_label)  # ImageLabelをレイアウトに追加

        self.setLayout(layout)  # レイアウトをウィジェットに設定

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

エクスプローラーなどから画像ファイルを空白部分にドラックアンドドロップ

画像が表示されます。

追記:20250214
Qtのオブジェクト内の変数(フィールド?)へのアクセスはgetの場合プロパティで、setの場合.setValue(x)のようなメソッドになっているように見受けられます。pythonの仕様では無い(C++?)とはおもいますが、Web検索などで機能を探す場合覚えておいた方が良さそう。

ネット検索すると以下のサイトに行きつくことが多いです。
Qt 6.8

多分本家QtのC++から呼び出すAPIだと思いますが、アロー演算子(->)を.(ドット)に読み替えるとPySide6でも使えることが多いので参考に成ります。

GUIを作るツールキットとしてtkinterと比べると出来ることが多い感じ、別の言語に成りますがC#のWinFormと比べると高機能で見た目がモダンな感じがします。

コメント