疑問・実現したいこと
サブウインドウから画像をドラッグアンドドロップし、メインウインドウのテキストボックスに画像のパスを表示させる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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/06 14:22