如何制作自定义容器?

2024-05-19 02:52:38 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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"

Tags: fromimportfieldtitlevaluecontainerconlabel
1条回答
网友
1楼 · 发布于 2024-05-19 02:52:38

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

enter image description here

或者,您可以将container子类化并重新实现layout_constraints方法,以实现任何布局目的(请参阅TaskDialog实现以获取此示例),或者为每个循环使用模板和编译时来展开子窗口小部件(请参阅高级模板示例)。在

相关问题 更多 >

    热门问题