Я играл с библиотекой Ruby "shoes". В принципе вы можете написать приложение GUI следующим образом:Как бы вы разработали интерфейс «Pythonic» UI?
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
Это заставило меня думать, - как бы я придумываю так же приятный в использовании рамки GUI в Python? Тот, у которого нет обычных привязок, в основном являющихся обертками в библиотеке C * (в случае GTK, Tk, wx, QT и т. Д.)
Обувь берет вещи из web devlopment (например, #f0c2f0
цветной обозначение стиля, методы компоновки CSS, как :margin => 10
), а также из рубина (экстенсивно с использованием блоков в разумных путях)
отсутствие Пайтона из «rubyish блоков» делает (метафорический) -direct порта невозможно:
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
метка в приведенном выше примере) может быть довольно сложным, но, кажется выполнимой в довольно аккуратный образом ..
И Ruby, и Python подходят для DSL. Разница заключается в «L»; это означает «языки» для Ruby и «библиотеки» для Python. Вы могли бы заставить некоторые синтаксические магии из Python, например, модели Django, но должны ли вы? – jfs 2008-12-03 05:19:06