【Substance Designer】pythonコードメモ
shamimatsu
三味松ブログ
PySide2を勉強中で使いやすくするためにドラッグアンドドロップを色々試しています。
テキストフィールドにファイルを投げると名前が表示されて、ボタンを押すとそこに書かれている文字のダイアログを出すメモになります。
import os.path
import sys
from PySide2.QtWidgets import (QPushButton, QWidget, QLineEdit, QApplication, QMessageBox, QVBoxLayout)
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# ボタンを作成
button1 = QPushButton("ボタン1")
button1.setFixedWidth(100)
button1.clicked.connect(self.button_click)
# テキストフィールドclass呼び出し
self.text_field = DroppableLineEdit()
self.text_field.setText('empty')
self.text_field.setFixedWidth(400)
# レイアウトの設定
layout = QVBoxLayout()
layout.addWidget(self.text_field)
layout.addWidget(button1)
self.setLayout(layout)
self.setWindowTitle('テキスト出力')
self.setGeometry(500, 500, 400, 150)
def button_click(self):
text = self.text_field.text()
QMessageBox.information(self, '名前', text)
# テキストフィールド
class DroppableLineEdit(QLineEdit):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setAcceptDrops(True)
def dragEnterEvent(self, event):
if event.mimeData().hasUrls():
event.accept()
else:
event.ignore()
def dropEvent(self, event):
if event.mimeData().hasText():
file_path = event.mimeData().text()
base_name = os.path.basename(file_path)
self.setText(base_name)
event.accept()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyWindow()
ex.show()
app.exec_()
AIにはかなりお世話になりました。ただ出てきたコードをそのまま使用してもエラーになったり求めていた処理ではないことがほとんどだったため、細かく分けて質問しました。
テキストフィールドがドラッグアンドドロップに対応したコードはclassをわけています。
別クラスの読み込みself.text_field = DroppableLineEdit()
self.text_field.setText('empty')