IronPython事始め

メニュー、ツールバー

Formのサンプルにメニューを追加してみます。 メニューを表示して"New"を選択すると、ポップアップメニューを表示します。

1. 画面キャプチャ

$alt $alt

2. サンプルコード:空のウィンドウにメニューをつける

MSDNのC#のサンプルそのままではありませんが、イベントハンドラのdef windowNewMenu_onclick(sender, arge)を登録するところは明確に違うところです。 サンプルではイベントハンドラをToolStripMenuItemのコンストラクタの引数に指定しますが、IronPythonでは.Clickに代入します。

02_form_menustrip.ipy

# coding=Shift_JIS
# IronPython Example:  MenuStrip
# - 
# @author: YasuhiroABE <yasu@yasundial.org>
# @see: MenuStrip Class Example from MSDN API Reference
#
import clr
clr.AddReferenceByPartialName("System.Windows.Forms")
clr.AddReferenceByPartialName("System.Drawing")
import System
from System.Windows.Forms import Form
from System.Windows.Forms import DockStyle
from System.Windows.Forms import MenuStrip
from System.Windows.Forms import MessageBox
from System.Windows.Forms import ToolStripMenuItem
from System.Drawing import Size

## setup form object
form = Form()
form.Text = "Hello World!"
form.Size = Size(300,200)
form.IsMdiContainer = True

## setup windowMenu object
windowMenu = ToolStripMenuItem("Window")
## setup windowNewMenu
windowNewMenu = ToolStripMenuItem("New", None)
def windowNewMenu_onclick(sender, arge):
  MessageBox.Show("Thank you for clicking on me!", "windowNewMenu_onclick")
  pass
windowNewMenu.Click += windowNewMenu_onclick
windowMenu.DropDownItems.Add(windowNewMenu)

## setup windowMenu object
ms = MenuStrip()
ms.MdiWindowListItem = windowMenu
ms.Items.Add(windowMenu)
ms.Dock = DockStyle.Top

## formオブジェクトへのms変数の追加は最後にします
form.MainMenuStrip = ms
form.Controls.Add(ms)

System.Windows.Forms.Application.Run(form)
## end ##

ここでは"Window"->"New"メニューを追加して、"New"メニューにイベントハンドラをセットしています。 form.IsMdiContaineはサンプルから引き継いだ記述で、コメントアウトしても動くのですが効果について理解していないのでそのままにしてあります。

サンプルからToolStripについての記述は削除してしまいましたが、基本的にはサンプルを引き継ぐ事で可能だと思います。>

3. 日本語でのコメントの入力について

普通に日本語を含めると、次のようなエラーメッセージが表示されます。

File "02_menustrip.ipy", line
SyntaxError: Non-ASCII character '\x83' in file 02_menustrip.ipy
on line 40, but no encoding declared; see http://www.python.org/peps/pep-0263.ht
ml for details

先頭に# coding=Shift_JISを入れることで回避できます。


Created: 2010-03-11, Last modified: 2010-03-19

2009,2010 © Yasuhiro ABE <yasu@yasundial.org>

Valid XHTML + RDFa RDFa it (RDF/XML)!

正当なCSSです!

Creative Commons License www.yasundial.org by Yasuhiro ABE is licensed under a Creative Commons Attribution 2.1 Japan License. Permissions beyond the scope of this license may be available at http://www.yasundial.org/info/license.html.