忍者ブログ
ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
[74]  [75]  [76]  [77]  [78]  [79]  [80]  [81]  [82]  [83]  [84
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

その4でPyQtで作ったGUIをRTコンポーネント化した際、グローバル変数を使いましたがOpenRTM-aist-Python-1.0.0のサンプルではもっときれいな方法でやってます。

今回はその4でのプログラムを少し書きなおしました。

サンプルはサンプルを置くページからPyQt-SAMPLE4-2.zipをダウンロードしてください。

手順としては、
 

  1. Dialogクラスの set_on_update(self, func) で self.on_update に関数funcを入れるようにする。
  2. GuiControllerクラスの set_out(self, b1, b2) のようにb1、b2をself.OUTに入れる関数を作る。
  3. self.OUT をアウトポートから出力するようにする。(onExecute)
  4. main で dialog.set_on_update(comp.set_out) のように関数set_outをset_on_updateのfuncにする。
  5. RTCBuilderの作るコードでは comp = mgr.createComponent("GuiController") がmainでは扱えず、dialog.set_on_update(comp.set_out) のようにset_out関数が使えないためサンプルのようにmain内に書きなおす。


こんな所。

全部同じファイルに書くならグローバル変数のほうが良いと思います。















ランキングに参加してます。押していただけると今まで経験がないくらい嬉しいです。
にほんブログ村 IT技術ブログ Pythonへ
にほんブログ村の
Pythonのカテゴリ
現在参加人数1人・・・
人気ブログランキングへ   

PR
今回はPyQtで作ったGUIをRTコンポーネント化します。

ソースは長いのでPyQtのサンプルを置くページからPyQt-SAMPLE4.zipをダウンロードしてください。


PyQt-SAMPLE4.pywがサンプルプログラムです。


ボタン1を押したら[1, 0]、ボタン2を押したら[0,1]を出力するTimedLongSeqの型のアウトポートを持ってます。

作り方としては、
  1. RTCBuilderでTimedLongSeqのアウトポートを持つコンポーネントを作成
  2. from PyQt4 import QtCore, QtGui のようにPyQtをインポート
  3. サンプルの OUT=[0,0] のように関数の外に変数を作成
  4. OnButton1 のようにOUT[0]の値を変える関数をダイアログのクラスに定義
  5. self.button1.clicked.connect(self.OnButton1) のように button1 が押されたら OnButton1 を実行するようにする
  6. onExcute で self._d_button.data = OUT、self._buttonOut.write() のようにOUTを出力する
  7. OUTが変化したときのみ出力するようにする。
  8. main内で app = QtGui.QApplication(sys.argv)、dialog = Dialog()、sys.exit(dialog.exec_()) と記述
  9. mgr.runManager(True) ←ここ重要

まあ、こんなところ。

今回の開発環境は、OpenRTM-aist-Python-1.0.0-RC1です。

0.4.2では動作しません。



次回は本格的に使えそうなコンポーネントを作成します。

何作ろうかな。

とりあえず動作確認コンポーネントをつくります。

デザインは現在思考中。

多分次の更新は3日以上先になると思います。











にほんブログ村 IT技術ブログ Pythonへ
にほんブログ村の
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コンポーネント化してみます。












にほんブログ村 IT技術ブログ Pythonへ
にほんブログ村の
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をレイアウトに追加してます。



次はオブジェクト化をやります。












にほんブログ村 IT技術ブログ Pythonへ
にほんブログ村の
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_())




すごい簡単ですねぇ。

サンプルのダウンロードはここから。


今日はこのぐらいにしときます。

次回はボタンを押すとアクションを起こすようにします。

多分、少しの変更で済みますが。


 






にほんブログ村 IT技術ブログ Pythonへ
にほんブログ村の
Pythonのカテゴリ
現在参加人数1人・・・
人気ブログランキングへ 
<< 前のページ 次のページ >>
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
フリーエリア
最新CM
[08/31 ysuga]
[08/31 Nobu]
[08/31 ysuga]
[12/11 Nobu]
[12/11 Kanamura]
最新TB
プロフィール
HN:
Nobu
年齢:
36
性別:
男性
誕生日:
1988/09/22
職業:
あれ
趣味:
妄想、自堕落
バーコード
ブログ内検索
P R
カウンター
忍者ブログ [PR]