« C4D Python R13 テスト:スクリプトでモーダルダイアログをなんとなく使ってみる… | トップページ | C4D Python R13 テスト:ダイアログのタブを試すの忘れていた… »

C4D Python R13 テスト:ダイアログの一般的なウィジェットの確認

とりあえず、ダイアログは使えそうで…
なのでウィジェットを試してみようかと…

C4Dでは、ダイアログのレイアウトは、リソースエディタによるリソースファイルを推奨しているようですが…
短いスクリプトや他人に渡すとき、ソースコード1個で済むので…

ま、その時々で臨機応変に…

こんなスクリプトから始めます。

Python
'''
スクリプトでダイアログのウィジェットのテスト
'''

import c4d
from c4d import gui


#ダイアログの設定
class MyDialogs(gui.GeDialog):
    #ダイアログレイアウトの設定
    def CreateLayout(self):
        self.SetTitle('TestScript')
       
        #ウィジェット等の設定
        self.GroupBegin(10000, c4d.BFH_SCALEFIT, 1, title = 'test')
        self.GroupBorder(c4d.BORDER_GROUP_IN)
        self.GroupBorderSpace(20, 5, 20, 5)
       
        #ここへ
       
        self.GroupEnd()
       
        #OK/キャンセルボタンの設置
        self.AddDlgGroup(c4d.DLG_OK|c4d.DLG_CANCEL)
        return True


def main():
    dlg = MyDialogs()
    dlg.Open(c4d.DLG_TYPE_MODAL)


if __name__=='__main__':
    main()
    c4d.EventAdd()

では、始めよう…
Command()を書いていないので、OK/キャンセルボタンではダイアログは閉じませんが…

グループにはボーダとボーダスペースを設定しました。

ボーダタイプはこんな具合…

Pythondialog_06

グループにタイトル表示させる場合のボーダはGroupBorder()で、タイトルを表示させない場合はGroupBorderNoTitle()を使うのだ。
タイトルを設定しないでGroupBorder()を使うとタイトル部分に隙間が開くんだ…

Pythondialog_29

ボーダスペースGroupBorderSpace()は、ボーダとウィジェットとの隙間の事で4つの引数は左側から時計回りで設定されます。

Pythondialog_05

では確認をして行こう…
あくまでも一般的なウィジェットだけ…

用意されているウィジェット用のメソッドの引数は、ほぼ共通している。
ウィジェットID、レイアウトフラッグ、幅、高さ、そのウィジェットの特有のもの…

ウィジェットIDは、他のものとダブらないように気をつけること。

レイアウトフラッグは、右寄せや左寄せセンター揃えなどです。
揃える方向は水平(BFH)/垂直(BFV)があります。
水平と垂直を組み合わせるには、BFHとBFVのビット演算ORをしてください。

Pythondialog_26

次のコードでレイアウトフラッグを確認してみてください。

Python
        #ウィジェット等の設定
        self.GroupBegin(10000, c4d.BFH_SCALEFIT, 2, title = 'test')
        self.GroupBorder(c4d.BORDER_GROUP_IN)
        self.GroupBorderSpace(20, 5, 20, 5)
       
        #ここへ
        self.AddButton(1000, c4d.BFV_SCALEFIT, 0, 50, 'Button')
        self.AddButton(1001, c4d.BFH_SCALEFIT, 0, 50, 'Button')
        self.AddButton(1002, c4d.BFV_SCALEFIT, 0, 50, 'Button')
        self.AddButton(1003, c4d.BFH_RIGHT, 0, 0, 'BFH_RIGHT')
        self.AddButton(1004, c4d.BFV_SCALEFIT, 0, 50, 'Button')
        self.AddButton(1005, c4d.BFH_CENTER, 0, 0, 'BFH_CENTER')
        self.AddButton(1006, c4d.BFV_SCALEFIT, 0, 50, 'Button')
        self.AddButton(1007, c4d.BFH_LEFT, 0, 0, 'BFH_LEFT')
        self.AddButton(1008, c4d.BFV_SCALEFIT, 0, 50, 'Button')
        self.AddButton(1009, c4d.BFV_TOP, 0, 0, 'BFV_TOP')
        self.AddButton(1010, c4d.BFV_SCALEFIT, 0, 50, 'Button')
        self.AddButton(1011, c4d.BFV_CENTER, 0, 0, 'BFV_CENTER')
        self.AddButton(1012, c4d.BFV_SCALEFIT, 0, 50, 'Button')
        self.AddButton(1013, c4d.BFV_BOTTOM, 0, 0, 'BFV_BOTTOM')
        self.AddButton(1014, c4d.BFV_SCALEFIT, 0, 50, 'Button')
        self.AddButton(1015, c4d.BFH_LEFT|c4d.BFV_TOP, 0, 0, 'BFH_LEFT | BFV_TOP')
        self.AddButton(1016, c4d.BFV_SCALEFIT, 0, 50, 'Button')
        self.AddButton(1017, c4d.BFH_LEFT|c4d.BFV_CENTER, 0, 0, 'BFH_LEFT | BFV_CENTER')
        self.AddButton(1018, c4d.BFV_SCALEFIT, 0, 50, 'Button')
        self.AddButton(1019, c4d.BFH_LEFT|c4d.BFV_BOTTOM, 0, 0, 'BFH_LEFT | BFV_BOTTOM')
               
        self.GroupEnd()

幅/高さは、0を設定すると自動的に設定されます。

では、ウィジェットを確かめてみよう…

Checkbox

GeDialog.AddCheckbox(id, flags[, initw=0][, inith=0][, name=''])

Pythondialog_07

Python
        #ウィジェット等の設定
        self.GroupBegin(10000, c4d.BFH_SCALEFIT, 1, title = 'test')
        self.GroupBorder(c4d.BORDER_GROUP_IN)
        self.GroupBorderSpace(20, 5, 20, 5)
       
        #ここへ
        self.AddCheckbox(1000, c4d.BFH_SCALEFIT, 0, 0, 'Checkbox')
       
        self.GroupEnd()

Button

GeDialog.AddButton(id, flags[, initw=0][, inith=0][, name=''])

Pythondialog_08

Python
        #ウィジェット等の設定
        self.GroupBegin(10000, c4d.BFH_SCALEFIT, 1, title = 'test')
        self.GroupBorder(c4d.BORDER_GROUP_IN)
        self.GroupBorderSpace(20, 5, 20, 5)
       
        #ここへ
        self.AddButton(1000, c4d.BFH_SCALEFIT, 0, 0, 'Button')
       
        self.GroupEnd()

StaticText

GeDialog.AddStaticText(id, flags[, initw=0][, inith=0][, name=''][, borderstyle=0])

Pythondialog_27

ボーダスタイルは、グループのボーダと同じです。

Python
        #ウィジェット等の設定
        self.GroupBegin(10000, c4d.BFH_SCALEFIT, 1, title = 'test')
        self.GroupBorder(c4d.BORDER_GROUP_IN)
        self.GroupBorderSpace(20, 5, 20, 5)
       
        #ここへ
        self.AddStaticText(1000, c4d.BFH_SCALEFIT, 0, 0, 'StaticText')
        self.AddStaticText(1001, c4d.BFH_SCALEFIT, 0, 0, 'StaticText', c4d.BORDER_THIN_IN)
       
        self.GroupEnd()

EditText

GeDialog.AddEditText(id, flags[, initw=0][, inith=0][, name=''][, editflags=0])

Pythondialog_10

下段は、パスワード入力用に設定してみました。
入力すると***で表示されます。

Python
        #ウィジェット等の設定
        self.GroupBegin(10000, c4d.BFH_SCALEFIT, 1, title = 'test')
        self.GroupBorder(c4d.BORDER_GROUP_IN)
        self.GroupBorderSpace(20, 5, 20, 5)
       
        #ここへ
        self.AddEditText(1000, c4d.BFH_SCALEFIT, 100, 0)
        self.AddEditText(1002, c4d.BFH_SCALEFIT, 100, 0, c4d.EDITTEXT_PASSWORD)
       
        self.GroupEnd()

MultiLineEditText

GeDialog.AddMultiLineEditText(id, flags[, initw=0][, inith=0][, name=''][, style=0])

Pythondialog_28

スタイルは、等幅/COFFEEハイライトと行番号/ステータスバーをビット演算で組み合わせることができる。

ダイアログが表示されたら下のCOFFEEをコピペしてみてください。

//試しにコピペしてみてください…
main(doc, op){
  var name = op->GetName();
  println(name);
}

Python
        #ウィジェット等の設定
        self.GroupBegin(10000, c4d.BFH_SCALEFIT, 1, title = 'test')
        self.GroupBorder(c4d.BORDER_GROUP_IN)
        self.GroupBorderSpace(20, 5, 20, 5)
       
        #ここへ
        self.AddMultiLineEditText(1000, c4d.BFH_SCALEFIT, 0, 90)
        self.AddMultiLineEditText(1001, c4d.BFH_SCALEFIT, 0, 90, c4d.DR_MULTILINE_MONOSPACED)
        self.AddMultiLineEditText(1002, c4d.BFH_SCALEFIT, 0, 90, c4d.DR_MULTILINE_SYNTAXCOLOR)
        self.AddMultiLineEditText(1003, c4d.BFH_SCALEFIT, 0, 90, c4d.DR_MULTILINE_STATUSBAR)
        self.AddMultiLineEditText(1004, c4d.BFH_SCALEFIT, 0, 90, c4d.DR_MULTILINE_MONOSPACED|c4d.DR_MULTILINE_SYNTAXCOLOR|c4d.DR_MULTILINE_STATUSBAR)
       
        self.GroupEnd()

EditNumber

GeDialog.AddEditNumber(id, flags[, initw=80][, inith=0])

Pythondialog_15

Python
        #ウィジェット等の設定
        self.GroupBegin(10000, c4d.BFH_SCALEFIT, 1, title = 'test')
        self.GroupBorder(c4d.BORDER_GROUP_IN)
        self.GroupBorderSpace(20, 5, 20, 5)
       
        #ここへ
        self.AddEditNumber(1000, c4d.BFH_SCALEFIT, 80, 0)
       
        self.GroupEnd()

EditNumberArrows

GeDialog.AddEditNumberArrows(id, flags[, initw=70][, inith=0])

Pythondialog_16

Python
        #ウィジェット等の設定
        self.GroupBegin(10000, c4d.BFH_SCALEFIT, 1, title = 'test')
        self.GroupBorder(c4d.BORDER_GROUP_IN)
        self.GroupBorderSpace(20, 5, 20, 5)
       
        #ここへ
        self.AddEditNumberArrows(1000, c4d.BFH_SCALEFIT, 50, 0)
       
        self.GroupEnd()

Slider

GeDialog.AddSlider(id, flags[, initw=90][, inith=0])

Pythondialog_17

Python
        #ウィジェット等の設定
        self.GroupBegin(10000, c4d.BFH_SCALEFIT, 1, title = 'test')
        self.GroupBorder(c4d.BORDER_GROUP_IN)
        self.GroupBorderSpace(20, 5, 20, 5)
       
        #ここへ
        self.AddSlider(1000, c4d.BFH_SCALEFIT, 90, 0)
       
        self.GroupEnd()

EditSlider

GeDialog.AddEditSlider(id, flags[, initw=80][, inith=0])

Pythondialog_18

Python
        #ウィジェット等の設定
        self.GroupBegin(10000, c4d.BFH_SCALEFIT, 1, title = 'test')
        self.GroupBorder(c4d.BORDER_GROUP_IN)
        self.GroupBorderSpace(20, 5, 20, 5)
       
        #ここへ
        self.AddEditSlider(1000, c4d.BFH_SCALEFIT, 80, 0)
       
        self.GroupEnd()

ColorField

GeDialog.AddColorField(id, flags[, initw=80][, inith=0])

Pythondialog_19

Python
        #ウィジェット等の設定
        self.GroupBegin(10000, c4d.BFH_SCALEFIT, 1, title = 'test')
        self.GroupBorder(c4d.BORDER_GROUP_IN)
        self.GroupBorderSpace(20, 5, 20, 5)
       
        #ここへ
        self.AddColorField(1000, c4d.BFH_SCALEFIT, 80, 12)
       
        self.GroupEnd()

ColorChooser

GeDialog.AddColorChooser(id, flags[, initw=80][, inith=0][, layoutflags=False])

Pythondialog_20

Python
        #ウィジェット等の設定
        self.GroupBegin(10000, c4d.BFH_SCALEFIT, 1, title = 'test')
        self.GroupBorder(c4d.BORDER_GROUP_IN)
        self.GroupBorderSpace(20, 5, 20, 5)
        self.GroupSpace(0, 20)
       
        #ここへ
        self.AddColorChooser(1000, c4d.BFH_SCALEFIT, 80, 0)
        self.AddColorChooser(1001, c4d.BFH_SCALEFIT, 80, 0, c4d.DR_COLORFIELD_NO_BRIGHTNESS)
        self.AddColorChooser(1002, c4d.BFH_SCALEFIT, 80, 0, c4d.DR_COLORFIELD_NO_COLOR)
        self.AddColorChooser(1003, c4d.BFH_SCALEFIT, 80, 0, c4d.DR_COLORFIELD_BODYPAINT)
       
        self.GroupEnd()

RadioGroup

GeDialog.AddRadioGroup(id, flags[, columns=0][, rows=0])

Pythondialog_21

Python
        #ウィジェット等の設定
        self.GroupBegin(10000, c4d.BFH_SCALEFIT, 1, title = 'test')
        self.GroupBorder(c4d.BORDER_GROUP_IN)
        self.GroupBorderSpace(20, 5, 20, 5)
       
        #ここへ
        self.AddRadioGroup(1000, c4d.BFH_SCALEFIT, 1)
        self.AddChild(1000, 0, 'Radio A')
        self.AddChild(1000, 1, 'Radio B')
        self.AddChild(1000, 2, 'Radio C')
        self.AddChild(1000, 3, 'Radio D')
       
        self.GroupEnd()

ComboBox

GeDialog.AddComboBox(id, flags[, initw=80][, inith=0][, specialalign=False])

Pythondialog_23

Python
        #ウィジェット等の設定
        self.GroupBegin(10000, c4d.BFH_SCALEFIT, 1, title = 'test')
        self.GroupBorder(c4d.BORDER_GROUP_IN)
        self.GroupBorderSpace(20, 5, 20, 5)
       
        #ここへ
        self.AddComboBox(1000, c4d.BFH_SCALEFIT, 80, 0, False)
        self.AddChild(1000, 0, 'Combo A')
        self.AddChild(1000, 1, 'Combo B')
        self.AddChild(1000, 2, 'Combo C')
        self.AddChild(1000, 3, 'Combo D')
       
        self.GroupEnd()

ウィジェットではないけれど、セパレータを…

SeparatorH

GeDialog.AddSeparatorH(initw[, flags=BFH_FIT])

Pythondialog_22

Python
        #ウィジェット等の設定
        self.GroupBegin(10000, c4d.BFH_SCALEFIT, 1, title = 'test')
        self.GroupBorder(c4d.BORDER_GROUP_IN)
        self.GroupBorderSpace(20, 5, 20, 5)
       
        #ここへ
        self.AddCheckbox(1000, c4d.BFH_SCALEFIT, 0, 0, 'Check A')
        self.AddSeparatorH(0, c4d.BFH_SCALEFIT)
        self.AddCheckbox(1001, c4d.BFH_SCALEFIT, 0, 0, 'Check B')
       
        self.GroupEnd()

SeparatorV

GeDialog.AddSeparatorV(inith[, flags=BFV_FIT])

Pythondialog_24

Python
        #ウィジェット等の設定
        self.GroupBegin(10000, c4d.BFH_SCALEFIT, 3, title = 'test')
        self.GroupBorder(c4d.BORDER_GROUP_IN)
        self.GroupBorderSpace(20, 5, 20, 5)
       
        #ここへ
        self.AddCheckbox(1000, c4d.BFH_SCALEFIT, 0, 0, 'Check A')
        self.AddSeparatorV(0, c4d.BFV_SCALEFIT)
        self.AddCheckbox(1001, c4d.BFH_SCALEFIT, 0, 0, 'Check B')
       
        self.GroupEnd()

一通り代表的なウィジェット試せたと思うけど…

|

« C4D Python R13 テスト:スクリプトでモーダルダイアログをなんとなく使ってみる… | トップページ | C4D Python R13 テスト:ダイアログのタブを試すの忘れていた… »

コメント

Hi, thanks for this good information.
Is it ok, I translate and adapt this information a bit and put it as a python tutorial on my blog. blog.grooff.eu

投稿: Pim | 2013年1月31日 (木) 16時47分

コメントを書く



(ウェブ上には掲載しません)




« C4D Python R13 テスト:スクリプトでモーダルダイアログをなんとなく使ってみる… | トップページ | C4D Python R13 テスト:ダイアログのタブを試すの忘れていた… »