日記帳だ! with Tux on Libserver

二度目の大改造!! 日記帳…か?を継承し、より柔軟でパワフルなBlogに変身しました。

RSSに対応しています。リンク・コメント・トラックバックは自由にしていただいてほぼ問題ありません。
RSS購読方法、僕のリンク・コメント・トラックバックについての考えを読むことをおすすめします。

JavaScriptを有効にし、Cookieを受け入れ、以下のブラウザを使うことで完全なコンテンツが楽しめます。
Mozilla Firefox 3.0(Get Firefox)・Opera 9.6・Safari 3.2・Lunascape 4/5(Gecko)・Lunascape 5(WebKit)
Internet Explorer 7/8とそれを使うIEコンポーネントブラウザ(Lunascape・Sleipnirなど)

こつこつFormを組み立てていきましょうか

インターネットのニュースを見てると、やたら、「日本の死刑制度に不満相次ぐ」とか書いてある。
なんぞやと思って読んでみると、国連からえらいいろいろ言われたと。
まぁ当然と言えば当然なんですけどね。
しかし、いくら国連が圧力をかけてきて、法務省が「刑法等の一部を改正する法律」とか出して、
死刑を廃止しようとしても、国会を通らないと意味がない。
まぁそういう意味で言えば、「死刑制度の存廃を世論調査で決めるのはおかしい」というのはおかしいわけで。
それはそうとして、かなり悲惨な運用方法なのは確かだから、とりあえずそこからか。
知らされてから殺されるまでそんなに時間がないと。部屋の片付けもできないとすら言われるほど。
まぁえらいことです。こういうところから調べていくとわかるところもあるのかなと。
最近IronPythonでそれなりに巨大なプログラムを書こうとしている。
なんでIronPythonやねんというのはあるが、まぁデバッグがおもしろいからか。
IronPythonは実行して初めてエラーがでるというのが結構多い。
そりゃそうですが。
まぁそれはそうと、フォームの作りやすさはかなりすばらしいものがあります。
それはVBにしてもC#にしても同じですが…
#encoding:utf-8
import clr
clr.AddReferenceByPartialName("System.Windows.Forms")
clr.AddReferenceByPartialName("System.Drawing")
import System
from System.Windows.Forms import Form,Button,FormBorderStyle,MessageBox,MessageBoxButtons,MessageBoxIcon
def main():
myform=Form()
myform.Text="IronPythonでWindows Form"
myform.FormBorderStyle=FormBorderStyle.Fixed3D
myform.ClientSize=System.Drawing.Size(500,200)
def click(button,e):
MessageBox.Show('%sのボタンが押されました!!'%button.Text,'おせっかい情報',MessageBoxButtons.OK,MessageBoxIcon.Information)
for i in range(0,9):
for j in range(0,10):
button=Button()
button.Text="(%d,%d)"%(i,j)
button.Size=System.Drawing.Size(50,20)
button.Location=System.Drawing.Point(50*j,20*i)
button.Click+=click
myform.Controls.Add(button)
buttonsdict={}
def clickclose(button,e):
button.Parent.Close()
def clickcolor(button,e):
button.Parent.BackColor=getattr(System.Drawing.Color,button.Text)
buttonsdict={'Close':clickclose,'Snow':clickcolor,'Khaki':clickcolor,'Plum':clickcolor,'Azure':clickcolor}
j=0
for key,val in buttonsdict.iteritems():
button=Button()
button.Text=key
button.Size=System.Drawing.Size(50,20)
button.Location=System.Drawing.Point(50*j,20*9)
j+=1
button.Click+=val
myform.Controls.Add(button)
myform.ShowDialog()
if(__name__=='__main__'):
main()
System.Windows.FormsもSystem.Drawingも両方参照設定を追加する必要があります。
まぁそれでFormのインスタンス作って、これにControls.Addでボタンをぺたぺた貼り付けていくと。
それでイベントの追加はメソッドを代入するだけでOK。
そのメソッドはメソッド内に作ると便利かも知れない。
最後にShowDialogで表示させてる。
他にいいやり方があるような気がするが、ShowDialogがまぁ扱いやすいかなと。
すれば、(1,1)をクリックすると、「(1,1)のボタンが押されました!!」のダイアログが、
Snowをクリックすれば背景色が雪色に、Closeは閉じられる。
基本的には上のようにすれば、いろんなフォームが作れますね。
複雑なフォームを、System.Windows.Forms.Formを継承したクラスを作って作ってもよろしいし、
まぁいろいろやり方はあるでしょう。
ところで、clickcolorメソッドにgetattr(System.Drawing.Color,button.Text)というのがある。
これなんだが、Pythonのリフレクションらしい。
何がやりたいかというと、button.Textが"White"ならば、System.Drawing.Color.Whiteを取得したいと。
なんか変なことをやってますけどね。
いろいろ調べてたが、うまく実現できたので書いてみた。
getattr(T,'attr')はT.attrと書くことと同じであると。
同様のことを.NET Frameworkを使ってC#で書くとこうなるのかな…
typeof(System.Drawing.Color).GetProperty(button.Text).GetValue(null,null)
GetValueの引数の1つ目はオブジェクト、2つ目はインデクサの引数らしい。
しかし、このSystem.Drawing.Color.Snowとかは、静的プロパティだから、
オブジェクトを引数に取ると言われてもないので、null。当然インデクサじゃないのでこれもnull。
というわけですが、まぁせっかくPythonならばPythonのそれを使えばいいのでそれでOKと。
とまぁ、IronPythonでフォームを作ってみたが、
どちらかというとC#とかで作ったフォームをIronPythonが操作するという方が流行みたいだけどね。
まぁその辺はいろいろあると思うし。
Author : hidemaro
Date : 2008/10/17(Fri) 23:54
Windows・Microsoft | Comment | trackback (0)

Tools