よしので、あなたがこれを行うことができますいくつかの方法があります。あなたはシグナルスロットの事のために正しい道を歩いています。しかし、あなたは各クラスで複数の呼び出しを他のクラスに持っているので、少し混乱します。
Window2
クラスの__init__
機能を変更して、テキストを受け入れるようにして、入力したテキストにQLineEdit
というテキストを設定するだけです。これは一度動作します。ボタンをクリックすると、2番目のウィンドウが表示され、その後のクリックではテキストは変更されません。ボタンが常に他のウィンドウのテキストを更新するようにする場合は、以下を参照してください。
ワンタイムクリック
import sys
from PyQt4 import QtGui, QtCore
class Window1(QtGui.QMainWindow):
textSaved = QtCore.pyqtSignal(str)
def __init__(self):
super(Window1,self).__init__()
self.setGeometry(50,50,500,300)
self.setWindowTitle("PyQt Signal Signal Emitter")
self.home()
def home(self):
self.__line=QtGui.QLineEdit("howdy", self)
self.__line.move(120,100)
btn=QtGui.QPushButton("Send Signal", self)
btn.clicked.connect(self.send_signal)
btn.move(0,100)
self.show()
def send_signal(self):
signal=self.__line.displayText()
self.textSaved.emit(signal)
self.Window2=Window2(signal) # instantiate Window2 with the text
self.Window2.show()
class Window2(QtGui.QMainWindow):
def __init__(self, txt):
self.text = txt
super(Window2,self).__init__()
self.setGeometry(50,50,500,300)
self.setWindowTitle("PyQt Signal Slot Receiver")
self.home()
def home(self):
self.line_response=QtGui.QLineEdit(self.text, self)
self.line_response.move(120,100)
@QtCore.pyqtSlot()
def showMessage(self, message):
self.bigbox(self, "The message is:"+ message)
self.show()
def run():
app=QtGui.QApplication(sys.argv)
GUI=Window1()
sys.exit(app.exec_())
run()
私はまた、あなたがそれを更新するか、self.bigbox
が何であるかを知らないのですか?私はそれを実行しようとしたとき、私はself.line_response
に変更した、それはあなたが意味すると思ったからです。
このソリューションは、Window1
の信号送信ボタンをクリックすると、第1のウィンドウのQLineEdit
の内容が第2のウィンドウの対応するウィンドウのWindow2
になるという意味で機能します。
あなたがそのボタンを押したときに、第二のウィンドウのQLineEdit
はWindow1
に現在のテキストに再び変更されることを、あなたはあなたの最初の内側にあなたのsend_signal
方法でelse文の場合、単純なを追加することができますように、これら二つのウィンドウをリンクさせたい場合クラス。また、実際のWindow1
クラスをWindow2
に渡す必要があります。
初めてボタンを押す場合は、Window2
クラスを現在のテキストでインスタンス化します。 2回目の+ボタンを押すと、クラス1から信号を出し、2番目のクラスのテキストを変更することができます。ここでは、このように動作し、いくつかのコードは次のとおりです。
リンクの窓ご質問があれば、コメントしてください
import sys
from PyQt4 import QtGui, QtCore
class Window1(QtGui.QMainWindow):
textSaved = QtCore.pyqtSignal(str)
def __init__(self):
super(Window1,self).__init__()
self.setGeometry(50,50,500,300)
self.setWindowTitle("PyQt Signal Signal Emitter")
self.home()
self.counter = 0
def home(self):
self.__line=QtGui.QLineEdit("howdy", self)
self.__line.move(120,100)
btn=QtGui.QPushButton("Send Signal", self)
btn.clicked.connect(self.send_signal)
btn.move(0,100)
self.show()
def send_signal(self):
if self.counter == 0:
signal=self.__line.displayText()
self.Window2=Window2(signal, self)
self.Window2.show()
self.textSaved.connect(self.Window2.showMessage)
self.counter = 1
else:
signal = self.__line.displayText()
self.textSaved.emit(signal)
class Window2(QtGui.QDialog):
def __init__(self, txt, window1):
self.text = txt
self.signal1 = window1.textSaved
super(Window2,self).__init__()
self.setGeometry(50,50,500,300)
self.setWindowTitle("PyQt Signal Slot Receiver")
self.home()
self.signal1.connect(self.showMessage)
def home(self):
self.line_response=QtGui.QLineEdit(self.text, self)
self.line_response.move(120,100)
def showMessage(self, message):
self.line_response.setText(message)
def run():
app=QtGui.QApplication(sys.argv)
GUI=Window1()
sys.exit(app.exec_())
run()
!私はこれをすぐに書きました。私はもっと時間があるときに、より多くの説明で編集します!
'Window2'は、' textSaved'シグナルが既に出力された後にのみ作成されます。したがって、放出時にはリスナーはなく、信号は無視されます。 – arhzu
Window1クラスの前にWindow2クラスを移動し、移動しました。 self.Window2 = Window2() send_signal定義のemit信号の前にはまだ運がありません。 –