gpt4 book ai didi

python - 你会如何设计一个非常 "Pythonic"的 UI 框架?

转载 作者:太空狗 更新时间:2023-10-29 17:36:17 25 4
gpt4 key购买 nike

我一直在玩 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 框架?没有通常的绑定(bind),基本上是 C* 库的包装器(对于 GTK、Tk、wx、QT 等)

Shoes 从 Web 开发(如 #f0c2f0 样式颜色符号、CSS 布局技术,如 :margin => 10)和 ruby​​(广泛使用 block 以明智的方式)

Python 缺少“rubyish block ”使得(隐喻地)直接移植成为不可能:

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

装饰器函数基本上存储了函数,然后当 Action 发生时(比如点击)相应的函数将被执行。

各种东西的范围(例如,上面示例中的 la 标签)可能相当复杂,但它似乎可以以一种相当简洁的方式实现。

最佳答案

您实际上可以做到这一点,但它需要使用元类,这是魔法(有龙)。如果您想了解元类,可以使用一系列 articles from IBM它设法在不融化你的大脑的情况下介绍这些想法。

来自 SQLObject 之类的 ORM 的源代码也可能有帮助,因为它使用了相同类型的声明性语法。

关于python - 你会如何设计一个非常 "Pythonic"的 UI 框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com