前提・実現したいこと
python3とPyQt5でライブラリのようなものを作っています。
発生している問題
main関数内にwidgetAクラスとwidgetBクラスが存在するものとして,
widgetAクラスのテキストボックスに入力したテキストを
widgetBに渡したいと考えています.(widgetAクラスのOKボタンを押したタイミングで)
また,これらのクラスはmain関数内で定義して,
main関数でqtの知識がない人に使ってもらうように(connectなどを用いないで)
受け渡したいとかんがえています.受け渡すタイミングでテキストを修正できるようにもしたいです.
試したこと
widgetAのクラス
python
1class widgetA(QtWidgets.QWidget): 2 3 procStart = QtCore.pyqtSignal(str) 4 5 def __init__(self, parent=None): 6 super(widgetA, self).__init__(parent) 7 8 self.tex = "" 9 self.lineEdit = QtWidgets.QLineEdit(self) 10 self.lineEdit.setText("Hello!") 11 12 self.button = QtWidgets.QPushButton("Send Message to B", self) 13 self.button.clicked.connect(self.on_button_clicked1) 14 15 self.layout = QtWidgets.QHBoxLayout(self) 16 self.layout.addWidget(self.lineEdit) 17 self.layout.addWidget(self.button) 18 19 def on_button_clicked1(self): 20 self.procStart.emit(self.lineEdit.text())
python
1class widgetB(QtWidgets.QWidget): 2 3 4 def __init__(self, parent=None): 5 super(widgetB, self).__init__(parent) 6 7 self.lineEdit = QtWidgets.QLineEdit(self) 8 self.button = QtWidgets.QPushButton("Send Message to A", self) 9 self.layout = QtWidgets.QHBoxLayout(self) 10 self.layout.addWidget(self.lineEdit) 11 self.layout.addWidget(self.button) 12 13 def on_procStart(self, message): 14 self.lineEdit.setText("From A: " + message) 15 print(message)
python
1import sys 2from PyQt5 import QtCore, QtGui, QtWidgets 3 4if __name__ == "__main__": 5 import sys 6 7 app = QtWidgets.QApplication(sys.argv) 8 9 widgetA = widgetA() 10 widgetB = widgetB() 11 widgetA.show() 12 widgetB.show() 13 14 #ここで,qtを知らない人でも使えるようにしたい. 15 widgetA.procStart.connect(widgetB.on_procStart) 16 17 sys.exit(app.exec_())
完成型のイメージ
python
1import sys 2from PyQt5 import QtCore, QtGui, QtWidgets 3 4if __name__ == "__main__": 5 import sys 6 7 app = QtWidgets.QApplication(sys.argv) 8 9 widgetA = widgetA() 10 widgetB = widgetB() 11 widgetA.show() 12 widgetB.show() 13 14 #クラスの中身を詳しく知らなくても使えるようにしたい. 15 #イメージ 16 widgetB.セッター関数( widgetA.ゲッター関数 ) 17 widgetAのtextをwidgetBのtextに渡したい. 18 19 #テキスト編集のイメージ 20. text = widgetA.ゲッター関数 21 text = text+"hogehoge" 22 widgetB.セッター関数( text ) 23 24 sys.exit(app.exec_())
初めてのteratailでの質問で分かりにくいところがあるかもしれませんが,よろしくお願いいたします。
こういうケースは普通シグナルスロットを使うので、以下が正着と思いますが、どのあたりがシンプルでないと感じるのでしょうか?
```
#ここをシンプルにしたい
widgetA.procStart.connect(widgetB.on_procStart)
```
tiitoi様,早速のご返答ありがとうございます.
main関数でqtの知識がない人に使ってもらうようにしたいのですが,
そのとき,widgetAのprocStartの部分や,connectがわかりにくいようで,この部分をうまく隠した使い方をできないか,検討しています.
text = text+"hogehoge"の部分もどうしたら実現できるのか,ご教示いただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー