Я играл с библиотекой Ruby "shoes". В основном вы можете написать графическое приложение следующим образом:
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 text
end
end
Это заставило меня подумать - как я мог бы создать аналогичную красивую графическую среду GUI в Python? Тот, у которого нет обычных привязок в основном к обертке в библиотеке C * (в случае GTK, Tk, wx, QT и т.д.)
Обувь берет вещи из веб-дизайна (например, #f0c2f0
стиль цвета, методы компоновки CSS, такие как :margin => 10
), и из рубина (широко используя блоки разумным образом)
Отсутствие 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
в приведенном выше примере) может быть довольно сложным, но это кажется выполнимым довольно аккуратным способом.