gpt4 book ai didi

python - 如何制作定制容器?

转载 作者:行者123 更新时间:2023-12-01 05:21:59 24 4
gpt4 key购买 nike

我想制作可重用的容器,其标题类似于横幅示例中的标题。(所以它就像一个自定义的 GroupBox)。所以我添加到类中的每个元素都应该添加到类子容器中,而不是添加到其自身。看下面的代码,我标记了我只想写入子元素的位置。

from enaml.widgets.api import *
from enaml.layout.api import *
from enaml.styling import *

enamldef BannerSheet(StyleSheet):
Style:
element = 'Label'
style_class = 'banner'
Setter:
field = 'background'
value = ('lineargradient(x1: 0, y1:0, x2:0, y2:1, '
'stop: 0 #222222, stop: 0.5 #1A1A1A, stop: 1 #111111)')
Setter:
field = 'color'
value = '#FFFFEF'
Setter:
field = 'padding'
value = '5px'
Setter:
field = 'font'
value = '18pt Verdana'

enamldef Banner(Container):
BannerSheet:
pass
padding = 0
alias title : lbl.text
constraints = [lbl.left == left,
lbl.right == right,
con.top == lbl.bottom,
con.bottom<=bottom]
Label: lbl:
name = 'abd'
style_class = 'banner'

Container: con:
pass


enamldef DemoContainer(Container):
padding = 0
Banner: b:
title = 'Bar'
#i want children here to be put into the banner.con container.
#so e.g.
Label:
text = 'This should be below the title label"

最佳答案

Enaml 不允许您使用声明性语法委托(delegate)层次结构中小部件的位置(您可以使用 Include 和过程代码来完成此操作)。最简单的选择是在横幅上使用子容器,其中包含小部件。类似于以下内容:

from enaml.widgets.api import *


enamldef BannerContainer(Container):
alias text: label.text
Label: label:
pass


enamldef Main(Window):
Container:
BannerContainer:
text = 'First Banner'
Container:
padding = 0
Field: pass
Field: pass
Field: pass
BannerContainer:
text = 'Second Banner'
Container:
padding = 0
PushButton: pass
PushButton: pass
PushButton: pass

enter image description here

或者,您可以子类化容器并重新实现layout_constraints方法来执行您想要的布局目的(请参阅TaskDialog实现以获取相关示例),或者使用模板和编译时for-each循环来展开子级小部件(请参阅高级模板示例)。

关于python - 如何制作定制容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22127896/

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