Date: 2004-09-09
Tags: python, programming

pyuiの練習

今日はpyuiのmenuをいじってみました:

import pyui
pyui.init(800,600)
def onCreate(item):
 pyui.widgets.Frame(50,50,100,100,item.text)
menu=pyui.widgets.Menu("create")
menu.addItem("Green", onCreate)
menu.addItem("White", onCreate)
menubar = pyui.widgets.MenuBar()
menubar.addMenu(menu)
pyui.run()

しかし、これではつまらないので、Menuの選択毎に違う挙動をさせてみたいと思います。本来であれば挙動を定義した関数(上記の例ではonCreate)を複数用意してそれぞれのMenuItemに登録するところですが、ここではlambdaを使って1行で書いてみたいと思います:

import pyui
pyui.init(800,600)
menu=pyui.widgets.Menu("create")
menu.addItem("Window" ,lambda item: pyui.widgets.Frame(50,50,100,100,item.text))
menu.addItem("Console",lambda item: pyui.dialogs.Console(100,100,200,100))
pyui.widgets.MenuBar().addMenu(menu)
pyui.run()

なかなかすっきりしました。

実際の所、lambdaの乱用はしない方が賢明なのですが、とりあえずlambdaの練習ということで、もう一歩踏み込んでlambdaを使ってみました:

import pyui
pyui.init(800,600)
pyui.widgets.MenuBar().addMenu((lambda menu=pyui.widgets.Menu("create"): menu.addItem("Window",lambda item: pyui.widgets.Frame(50,50,100,100,item.text)) and menu.addItem("Console",lambda item: pyui.dialogs.Console(100,100,200,100)) and menu)())
pyui.run()

もう読めません(笑)

途中からpyuiは関係なくなってしまいましたが、こんな事も出来る、というのを体験してみたかったと言うことで。 おかげで、既存のpythonのコードを読んでいて時々出てくる and と or を使用したif文の短絡表記方法が理解できました。

やはり習うより慣れろ、という事で、実際にコードを書かないと文法とか表現って身に付かないですね。