[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
その4でPyQtで作ったGUIをRTコンポーネント化した際、グローバル変数を使いましたがOpenRTM-aist-Python-1.0.0のサンプルではもっときれいな方法でやってます。
今回はその4でのプログラムを少し書きなおしました。
サンプルはサンプルを置くページからPyQt-SAMPLE4-2.zipをダウンロードしてください。
手順としては、
- Dialogクラスの set_on_update(self, func) で self.on_update に関数funcを入れるようにする。
- GuiControllerクラスの set_out(self, b1, b2) のようにb1、b2をself.OUTに入れる関数を作る。
- self.OUT をアウトポートから出力するようにする。(onExecute)
- main で dialog.set_on_update(comp.set_out) のように関数set_outをset_on_updateのfuncにする。
- RTCBuilderの作るコードでは comp = mgr.createComponent("GuiController") がmainでは扱えず、dialog.set_on_update(comp.set_out) のようにset_out関数が使えないためサンプルのようにmain内に書きなおす。
こんな所。
全部同じファイルに書くならグローバル変数のほうが良いと思います。
ランキングに参加してます。押していただけると今まで経験がないくらい嬉しいです。
にほんブログ村の
Pythonのカテゴリ
現在参加人数1人・・・
ソースは長いのでPyQtのサンプルを置くページからPyQt-SAMPLE4.zipをダウンロードしてください。
PyQt-SAMPLE4.pywがサンプルプログラムです。
ボタン1を押したら[1, 0]、ボタン2を押したら[0,1]を出力するTimedLongSeqの型のアウトポートを持ってます。
作り方としては、
- RTCBuilderでTimedLongSeqのアウトポートを持つコンポーネントを作成
- from PyQt4 import QtCore, QtGui のようにPyQtをインポート
- サンプルの OUT=[0,0] のように関数の外に変数を作成
- OnButton1 のようにOUT[0]の値を変える関数をダイアログのクラスに定義
- self.button1.clicked.connect(self.OnButton1) のように button1 が押されたら OnButton1 を実行するようにする
- onExcute で self._d_button.data = OUT、self._buttonOut.write() のようにOUTを出力する
- OUTが変化したときのみ出力するようにする。
- main内で app = QtGui.QApplication(sys.argv)、dialog = Dialog()、sys.exit(dialog.exec_()) と記述
- mgr.runManager(True) ←ここ重要
まあ、こんなところ。
今回の開発環境は、OpenRTM-aist-Python-1.0.0-RC1です。
0.4.2では動作しません。
次回は本格的に使えそうなコンポーネントを作成します。
何作ろうかな。
とりあえず動作確認コンポーネントをつくります。
デザインは現在思考中。
多分次の更新は3日以上先になると思います。
にほんブログ村の
Pythonのカテゴリ
現在参加人数1人・・・
今回はオブジェクト化をやります。
ソースは以下の通りです。
from PyQt4 import QtCore, QtGui
#PyQtのインポートは必須
import sys
class Dialog(QtGui.QDialog):
def __init__(self, parent=None):
super(Dialog, self).__init__(parent)
self.mainLayout = QtGui.QVBoxLayout()
self.button1 = QtGui.QPushButton("Button 1")
self.mainLayout.addWidget(self.button1)
self.button1.clicked.connect(self.SetButton)
self.button2 = QtGui.QPushButton("Button 2")
self.mainLayout.addWidget(self.button2)
self.setLayout(self.mainLayout)
self.setWindowTitle("SAMPLE3")
self.setMinimumSize(200, 200)
self.count = 3
def SetButton(self):
addbutton = QtGui.QPushButton("Button %d" % self.count)
self.mainLayout.addWidget(addbutton)
self.count += 1
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
dialog = Dialog()
sys.exit(dialog.exec_())
ここからダウンロードできます。
今度はボタンが押しただけ分裂します。
オブジェクト化した方がわかりやすい・・・・と思うよ?
次回はPyQtで作ったGUIをRTコンポーネント化してみます。
にほんブログ村の
Pythonのカテゴリ
現在参加人数1人・・・
では今回はボタンを押すとアクションを起こすようにします。
ボタンを押すと、ボタンが増えます。
以下サンプルです
from PyQt4 import QtCore, QtGui
#PyQtのインポートは必須
import sys
#これは必ず必須
app = QtGui.QApplication(sys.argv)
#ダイアログ作成
dialog = QtGui.QDialog()
#レイアウトの作成、QVは縦、QHは横に並べる
mainLayout = QtGui.QVBoxLayout()
#ボタン1の作成
button1 = QtGui.QPushButton("Button 1")
mainLayout.addWidget(button1)
#ボタン2の作成
button2 = QtGui.QPushButton("Button 2")
mainLayout.addWidget(button2)
button3 = QtGui.QPushButton("Button 3")
def SetButton():
mainLayout.addWidget(button3)
button1.clicked.connect(SetButton)
#ダイアログにレイアウトを指定
dialog.setLayout(mainLayout)
#ダイアログの名前
dialog.setWindowTitle("SAMPLE2")
#ダイアログのサイズ
dialog.setMinimumSize(200, 200)
#これも必須
sys.exit(dialog.exec_())
ここからダウンロードできます。
追加したのは以下のコードです。
button3 = QtGui.QPushButton("Button 3")
def SetButton():
mainLayout.addWidget(button3)
button1.clicked.connect(SetButton)
button3オブジェクトを作ります。
button1.clicked.connect(SetButton)でbotton1がクリックされるとSetButton関数が実行されます。
SetButton関数ではbutton3をレイアウトに追加してます。
次はオブジェクト化をやります。
にほんブログ村の
Pythonのカテゴリ
現在参加人数1人・・・
にほんブログ村のPythonのカテゴリに登録したことだしPythonの記事を書こうかなっと。
今回はPyQtでPythonでGUIを作ってみたいと思います。
僕自身、PyQtを使うのは初めてですが何とかします。
必要なのは、今回の開発環境は
Python2.4
PyQt-Py2.4-gpl-4.7-1
PyQtはPyQt-Py2.4-gpl-4.7-1.exeを入手して実行するだけでインストールできます。
これで完了。
サンプルはC:\Python24\Lib\site-packages\PyQt4\examplesにあると思います。
簡単なサンプルを作成してみます。
ボタンが二つ並んだだけのサンプルです。
ソースは以下の通りです。
from PyQt4 import QtCore, QtGui
#PyQtのインポートは必須
import sys
#これは必ず必須
app = QtGui.QApplication(sys.argv)
#ダイアログ作成
dialog = QtGui.QDialog()
#レイアウトの作成、QVは縦、QHは横に並べる
mainLayout = QtGui.QVBoxLayout()
#ボタン1の作成
button1 = QtGui.QPushButton("Button 1")
mainLayout.addWidget(button1)
#ボタン2の作成
button2 = QtGui.QPushButton("Button 2")
mainLayout.addWidget(button2)
#ダイアログにレイアウトを指定
dialog.setLayout(mainLayout)
#ダイアログの名前
dialog.setWindowTitle("SAMPLE1")
#ダイアログのサイズ
dialog.setMinimumSize(200, 200)
#これも必須
sys.exit(dialog.exec_())
すごい簡単ですねぇ。
サンプルのダウンロードはここから。
今日はこのぐらいにしときます。
次回はボタンを押すとアクションを起こすようにします。
多分、少しの変更で済みますが。
にほんブログ村の
Pythonのカテゴリ
現在参加人数1人・・・