【Maya:Python】ボタンを押した回数をカウントする
shamimatsu
三味松ブログ
PySide2を勉強中で使いやすくするためにドラッグアンドドロップを色々試しています。
テキストフィールドにファイルを投げると名前が表示されて、ボタンを押すとそこに書かれている文字のダイアログを出すメモになります。
1import os.path
2import sys
3from PySide2.QtWidgets import (QPushButton, QWidget, QLineEdit, QApplication, QMessageBox, QVBoxLayout)
4
5
6class MyWindow(QWidget):
7 def __init__(self):
8 super().__init__()
9 self.initUI()
10
11 def initUI(self):
12 # ボタンを作成
13 button1 = QPushButton("ボタン1")
14 button1.setFixedWidth(100)
15 button1.clicked.connect(self.button_click)
16
17 # テキストフィールドclass呼び出し
18 self.text_field = DroppableLineEdit()
19 self.text_field.setText('empty')
20 self.text_field.setFixedWidth(400)
21
22 # レイアウトの設定
23 layout = QVBoxLayout()
24 layout.addWidget(self.text_field)
25 layout.addWidget(button1)
26 self.setLayout(layout)
27
28 self.setWindowTitle('テキスト出力')
29 self.setGeometry(500, 500, 400, 150)
30
31 def button_click(self):
32 text = self.text_field.text()
33 QMessageBox.information(self, '名前', text)
34
35
36# テキストフィールド
37class DroppableLineEdit(QLineEdit):
38 def __init__(self, *args, **kwargs):
39 super().__init__(*args, **kwargs)
40 self.setAcceptDrops(True)
41
42 def dragEnterEvent(self, event):
43 if event.mimeData().hasUrls():
44 event.accept()
45 else:
46 event.ignore()
47
48 def dropEvent(self, event):
49 if event.mimeData().hasText():
50 file_path = event.mimeData().text()
51 base_name = os.path.basename(file_path)
52 self.setText(base_name)
53 event.accept()
54
55
56if __name__ == '__main__':
57 app = QApplication(sys.argv)
58 ex = MyWindow()
59 ex.show()
60 app.exec_()
AIにはかなりお世話になりました。ただ出てきたコードをそのまま使用してもエラーになったり求めていた処理ではないことがほとんどだったため、細かく分けて質問しました。
テキストフィールドがドラッグアンドドロップに対応したコードはclassをわけています。
別クラスの読み込みself.text_field = DroppableLineEdit()
self.text_field.setText('empty')