如何制作自定义容器?

耕作

我想在横幅示例中使用标题制作可重复使用的Container。(所以它就像一个自定义的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"
克里斯·科伯特(Chris Colbert)

Enaml不允许您使用声明性语法来委托小部件在层次结构中的位置(可以使用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

在此处输入图片说明

另外,您可以子类化容器并重新实现layout_constraints方法以完成您想要的布局目的(请参见TaskDialog实现以获取示例),或使用模板和编译时for-each循环来扩展子窗口小部件(请参见高级模板示例)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Clippath 在容器上制作自定义形状

来自分类Dev

Java如何制作自定义异常?

来自分类Dev

如何制作nbconvert自定义模板

来自分类Dev

如何制作自定义键盘布局?

来自分类Dev

django如何制作自定义网址

来自分类Dev

如何制作自定义键盘布局?

来自分类Dev

如何制作腻子自定义颜色

来自分类Dev

如何制作自定义通知?

来自分类Dev

如何制作自定义服务命令?

来自分类Dev

如何创建引用的自定义容器?

来自分类Dev

制作自定义UINavigationBar

来自分类Dev

如何使用图像和标签制作自定义UIBarButtonItem?

来自分类Dev

如何制作自定义可点击区域?

来自分类Dev

如何制作更好的自定义对话框?

来自分类Dev

Kurento:如何制作自定义过滤器?

来自分类Dev

如何制作自定义填充手柄图案?

来自分类Dev

如何制作自定义视图(imageview + progressbar)?

来自分类Dev

如何制作自定义可拖动脚本

来自分类Dev

VBS如何制作自定义选项按钮?

来自分类Dev

如何制作自定义Cast MediaRouter对话框

来自分类Dev

如何在C#中制作自定义颜色?

来自分类Dev

如何制作水平/自定义Bootstrap下拉列表?

来自分类Dev

如何在Android中制作自定义TextView?

来自分类Dev

如何制作像这样的自定义导航视图动画

来自分类Dev

如何在C#中制作自定义GUI

来自分类Dev

如何制作与RecyclerView兼容的Android自定义视图

来自分类Dev

Elixir:如何制作自定义类型实现==,<和>

来自分类Dev

如何使用熊猫制作自定义混淆矩阵

来自分类Dev

如何使用自定义字段制作JSON