どうも!たっくんです!
ClientからMayaを操作する方法はわかったけど、、、
Mayaからデータ
受け取れないの!?
っという方がいらっしゃるかと思いますので、Mayaの戻り値をClientで受け取る方法をご紹介したいと思います!(`・ω・´)ゞ
ログを表示する準備
Mayaから受け取ったデータを表示できるように、ログ用の「QTextEdit」を追加したいと思います!
import sys from PySide import QtCore, QtGui, QtNetwork class Client(QtGui.QWidget): def __init__(self, *args, **kwargs): super(Client, self).__init__(*args, **kwargs) mainLayout = QtGui.QVBoxLayout(self) self.__editor = QtGui.QTextEdit(self) self.__editor.setEnabled(False) mainLayout.addWidget(self.__editor) button = QtGui.QPushButton('Send', self) button.clicked.connect(self.send) mainLayout.addWidget(button) self.__log = QtGui.QTextEdit(self) self.__log.setEnabled(False) mainLayout.addWidget(self.__log) self.__tcpSocket = QtNetwork.QTcpSocket(self) self.__tcpSocket.error.connect(self.displayError) self.__tcpSocket.connected.connect(self.connected) self.__tcpSocket.connectToHost('127.0.0.1', 8888) def connected(self): self.__editor.setEnabled(True) def displayError(self, socketError): QtGui.QMessageBox.information(self, 'Client', self.__tcpSocket.errorString()) def send(self): command = self.__editor.toPlainText() data = QtCore.QByteArray(command) self.__tcpSocket.write(data) if __name__ == '__main__': app = QtGui.QApplication(sys.argv) window = Client() window.show() sys.exit(app.exec_())
データを受信した時の処理
QTcpSocketは、データを受信した時にシグナル「readyRead」を出してくれるので、これにスロット「receiveData」をコネクションします。受け取ったデータは「QByteArray」になるので、文字列として扱いたい場合は、メソッド「data」から取り出します!(*´ω`*)b
import sys from PySide import QtCore, QtGui, QtNetwork class Client(QtGui.QWidget): def __init__(self, *args, **kwargs): super(Client, self).__init__(*args, **kwargs) mainLayout = QtGui.QVBoxLayout(self) self.__editor = QtGui.QTextEdit(self) self.__editor.setEnabled(False) mainLayout.addWidget(self.__editor) button = QtGui.QPushButton('Send', self) button.clicked.connect(self.send) mainLayout.addWidget(button) self.__log = QtGui.QTextEdit(self) self.__log.setEnabled(False) mainLayout.addWidget(self.__log) self.__tcpSocket = QtNetwork.QTcpSocket(self) self.__tcpSocket.error.connect(self.displayError) self.__tcpSocket.readyRead.connect(self.receiveData) self.__tcpSocket.connected.connect(self.connected) self.__tcpSocket.connectToHost('127.0.0.1', 8888) def connected(self): self.__editor.setEnabled(True) def displayError(self, socketError): QtGui.QMessageBox.information(self, 'Client', self.__tcpSocket.errorString()) def receiveData(self): receiveByteData = self.__tcpSocket.readAll() if receiveByteData.length() == 0: return self.__log.append(receiveByteData.data()) def send(self): command = self.__editor.toPlainText() data = QtCore.QByteArray(command) self.__tcpSocket.write(data) if __name__ == '__main__': app = QtGui.QApplication(sys.argv) window = Client() window.show() sys.exit(app.exec_())
実験!
上記のコードを実行して、Mayaからデータを受け取れるか確認してみます!(`・ω・´)ゞ
戻り値がちょっと扱いにくいデータですが、、、工夫次第でいろいろレスポンスを作れるかと思います!(`・ω・´)ゞ