質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

解決済

ドラッグアンドドロップした画像データのパスを表示したい

scarlet09Libra
scarlet09Libra

総合スコア1

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1回答

0評価

1クリップ

475閲覧

投稿2022/01/04 10:04

疑問・実現したいこと

サブウインドウから画像をドラッグアンドドロップし、メインウインドウのテキストボックスに画像のパスを表示させるGUIアプリを開発しています。

画像データがドロップされた時、SubWindowクラスのdropEventから、MainWindowクラスのputTextを実行し、メインウインドウのテキストボックスにテキストを表示させるようにしています。
しかし、putTextメソッドの「self.url.setPlainText('This function is work')」の部分が機能しておらず、テキストボックスに文字列が表示されません。(「print('WORKED!!')」は出力されるので、putTextが正常に機能していることは確認しています)

putTextの引数にfilepathを設定し、それをsetPlainTextで表示すれば想定する動作を実現できると考えていましたが、setPlainText自体が動かず困っています。
画像データがドロップされた時、そのパスをメインウインドウのテキストボックスに表示させるにはどうしたら良いでしょうか。また、なぜsetPlainTextは動かないのでしょうか。

ご教授の程よろしくお願い致します。

該当のソースコード

import sys from PyQt5.QtWidgets import QApplication, QPlainTextEdit, QWidget, QLabel, QVBoxLayout from PyQt5.QtCore import Qt from PyQt5.QtGui import QPixmap class ImageLabel(QLabel): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setAlignment(Qt.AlignCenter) self.setText('\n\n Drop Image Here \n\n') self.setStyleSheet(''' QLabel{ border: 4px dashed #aaa } ''') def setPixmap(self, image): super().setPixmap(image) class SubWindow(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('SubWindow') self.setGeometry(950, 200, 400, 400) self.setAcceptDrops(True) self.photoViewer = ImageLabel() imageLayout = QVBoxLayout() imageLayout.addWidget(self.photoViewer) self.setLayout(imageLayout) def dragEnterEvent(self, event): if event.mimeData().hasImage: event.accept() else: event.ignore() def dragMoveEvent(self, event): if event.mimeData().hasImage: event.accept() else: event.ignore() def dropEvent(self, event): if event.mimeData().hasImage: event.setDropAction(Qt.CopyAction) self.filepath = event.mimeData().urls()[0].toLocalFile() self.setImage(self.filepath) main = MainWindow() main.putText() event.accept() else: event.ignore() def setImage(self, filepath): self.photoViewer.setPixmap(QPixmap(filepath)) class MainWindow(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('MainWindow') self.setGeometry(200, 100, 500, 200) self.url = QPlainTextEdit(self) self.url.setGeometry(50, 50, 400, 100) self.url.setPlaceholderText('Image URL will be set here') def putText(self): self.url.setPlainText('This function is work') print('WORKED!!') if __name__ == '__main__': app = QApplication(sys.argv) main_window = MainWindow() main_window.show() sub_window = SubWindow() sub_window.show() sys.exit(app.exec_())

開発環境

OS: macOS Catalina 10.15.7
Python: 3.8.2
PyQt5: 5.15.4

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。