私はRubyライブラリの「靴」で遊んでいます。基本的に、次の方法でGUIアプリケーションを作成できます。
Shoes.app do
t = para "Not clicked!"
button "The Label" do
alert "You clicked the button!" # when clicked, make an alert
t.replace "Clicked!" # ..and replace the label's text
end
end
これは私に考えさせられました-Pythonで同様に使いやすいGUIフレームワークをどのように設計しますか?基本的にC*ライブラリのラッパーであるという通常の結びつきがないもの(GTK、Tk、wx、QTなどの場合)
靴は、Web開発(#f0c2f0
スタイルの色表記、CSSレイアウト手法など:margin => 10
)とruby(賢明な方法でブロックを広範に使用する)から物事を取り入れます
Pythonには「ごちゃごちゃしたブロック」がないため、(比喩的に)直接移植は不可能です。
def Shoeless(Shoes.app):
self.t = para("Not clicked!")
def on_click_func(self):
alert("You clicked the button!")
self.t.replace("clicked!")
b = button("The label", click=self.on_click_func)
それほどきれいな場所はなく、柔軟性もほとんどありません。また、それが実装可能かどうかさえわかりません。
デコレータを使用することは、コードのブロックを特定のアクションにマップするための興味深い方法のようです。
class BaseControl:
def __init__(self):
self.func = None
def clicked(self, func):
self.func = func
def __call__(self):
if self.func is not None:
self.func()
class Button(BaseControl):
pass
class Label(BaseControl):
pass
# The actual applications code (that the end-user would write)
class MyApp:
ok = Button()
la = Label()
@ok.clicked
def clickeryHappened():
print "OK Clicked!"
if __name__ == '__main__':
a = MyApp()
a.ok() # trigger the clicked action
基本的に、デコレータ関数は関数を格納し、アクションが発生すると(たとえば、クリック)、適切な関数が実行されます。
さまざまなもの(たとえばla
、上記の例のラベル)の範囲はかなり複雑になる可能性がありますが、かなりきちんと実行できるようです。