PyGobject(四十四)布局容器之Stack&StackSwitcher

Gtk.StackSwitcher

Gtk.Stack是一个一次只能显示一个子部件的容器,有点类似于Gtk.Notebook,不同的是Gtk.Notebook可以控制子部件的可见与否。Gtk.Stack不能直接控制,但是可以通过Gtk.StackSwitcher来实现

关于垂直方向的Stack参见PyGobject(三十)布局容器之StackSidebar

继承关系

Gtk.StackSwitcher是Gtk.Box的直接子类
这里写图片描述

Methods

方法修饰词方法名及参数
staticnew ()
get_stack ()
set_stack (stack)

Virtual Methods

Properties

NameTypeFlagsShort Description
icon-sizeintr/w/enSymbolic size to use for named icon
stackGtk.Stackr/w/cStack

Signals

NameShort Description

Gtk.Stack

继承关系

Gtk.Stack是Gtk.Container 的直接子类
这里写图片描述

Methods

方法修饰词方法名及参数
staticnew ()
add_named (child, name)
add_titled (child, name, title)
get_child_by_name (name)
get_hhomogeneous ()
get_homogeneous ()
get_interpolate_size ()
get_transition_duration ()
get_transition_running ()
get_transition_type ()
get_vhomogeneous ()
get_visible_child ()
get_visible_child_name ()
set_hhomogeneous (hhomogeneous)
set_homogeneous (homogeneous)
set_interpolate_size (interpolate_size)
set_transition_duration (duration)
set_transition_type (transition)
set_vhomogeneous (vhomogeneous)
set_visible_child (child)
set_visible_child_full (name, transition)
set_visible_child_name (name)

Virtual Methods

Properties

NameTypeFlagsShort Description
hhomogeneousboolr/w/en子孩子水平方向尺寸是否相等
homogeneousboolr/w/en子孩子大小是否相等
interpolate-sizeboolr/w/en当在不同大小的子部件之间切换,容器大小是否平滑的改变
transition-durationintr/w/en动画持续时间,单位毫秒
transition-runningboolr动画是否正在运行
transition-typeGtk.StackTransitionTyper/w/en动画类型
vhomogeneousboolr/w/en子孩子垂直方向尺寸是否相等
visible-childGtk.Widgetr/w/en在stack中当前可见的部件
visible-child-namestrr/w/en在stack中当前可见的部件名称

Signals

NameShort Description

例子

这里写图片描述
代码:

#!/usr/bin/env python3
# Created by xiaosanyu at 16/6/13
# section 061
TITLE = "Stack"
DESCRIPTION = """
The Gtk.Stack widget is a container which only shows one of its children at a time.
In contrast to Gtk.Notebook, Gtk.Stack does not provide a means for users to change the visible child.
Instead, the Gtk.StackSwitcher widget can be used with Gtk.Stack to provide this functionality.
"""
import gi

gi.require_version('Gtk', '3.0')
from gi.repository import Gtk


class StackWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Stack Demo")
        self.set_border_width(10)

        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
        self.add(vbox)

        stack = Gtk.Stack()
        stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT_RIGHT)
        stack.set_transition_duration(1000)

        checkbutton = Gtk.CheckButton("Click me!")
        stack.add_titled(checkbutton, "check", "Check Button")

        label = Gtk.Label()
        label.set_markup("<big>A fancy label</big>")
        stack.add_titled(label, "label", "A label")

        stack_switcher = Gtk.StackSwitcher()
        stack_switcher.set_stack(stack)
        vbox.pack_start(stack_switcher, True, True, 0)
        vbox.pack_start(stack, True, True, 0)


def main():
    win = StackWindow()
    win.connect("delete-event", Gtk.main_quit)
    win.show_all()
    Gtk.main()


if __name__ == "__main__":
    main()

代码解析

vbox= Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
self.add(vbox)

先创建一个垂直布局的Box

stack = Gtk.Stack()
        stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT_RIGHT)
stack.set_transition_duration(1000)

创建一个Gtk.Stack,设置动画类型为从左或从右滑入,动画持续时间1S

checkbutton = Gtk.CheckButton("Click me!")
stack.add_titled(checkbutton, "check", "Check Button")

创建一个Gtk.CheckButton,添加到stack中,显示标题为”Check Button”,名称为”check”

label = Gtk.Label()
label.set_markup("<big>A fancy label</big>")
stack.add_titled(label, "label", "A label")

创建一个Gtk.Label,添加到stack中,显示标题为”A label”,名称为”label”

stack_switcher = Gtk.StackSwitcher()
stack_switcher.set_stack(stack)

创建一个Gtk.StackSwitcher,设置stack

vbox.pack_start(stack_switcher, True, True, 0)
vbox.pack_start(stack, True, True, 0)

将switcher和stack添加到box中

附录

Gtk.StackTransitionType.SLIDE_LEFT_RIGHT

class Gtk.StackTransitionType
Bases: GObject.GEnum

NONE = 0

无动画

CROSSFADE = 1

淡入淡出

OVER_LEFT = 10

通过向左滑动覆盖旧页面。

New in version 3.12.

OVER_RIGHT = 11

通过向右滑动覆盖旧页面。

New in version 3.12.

UNDER_UP = 12

通过向上滑动揭开新的一页。

New in version 3.12.

UNDER_DOWN = 13

通过向下滑动揭开新的一页。

New in version 3.12.

UNDER_LEFT = 14

通过向左滑动揭开新的一页。

New in version 3.12.

UNDER_RIGHT = 15

通过向右滑动揭开新的一页。

New in version 3.12.

OVER_UP_DOWN = 16

向上滑动覆盖旧页面或向下滑动揭开新的一页。

New in version 3.12.

OVER_DOWN_UP = 17

向下滑动覆盖旧页面或向上滑动揭开新的一页。

New in version 3.14.

OVER_LEFT_RIGHT = 18

向左滑动覆盖旧页面或向右滑动揭开新的一页。
New in version 3.14.

OVER_RIGHT_LEFT = 19

向右滑动覆盖旧页面或向左滑动揭开新的一页。

New in version 3.14.

SLIDE_RIGHT = 2

从左往右滑入

SLIDE_LEFT = 3

从右往左滑入

SLIDE_UP = 4

从下往上滑入

SLIDE_DOWN = 5

从上往下滑入

SLIDE_LEFT_RIGHT = 6

根据孩子的顺序从左滑入或从右滑入

SLIDE_UP_DOWN = 7

根据孩子的顺序从上滑入或从下滑入

OVER_UP = 8

通过向上滑动覆盖旧页面。

New in version 3.12.

OVER_DOWN = 9

通过向下滑动覆盖旧页面。

New in version 3.12.





代码下载地址:http://download.csdn.net/detail/a87b01c14/9594728

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你好!关于容器 stack,我可以给你一些简单的介绍。 在C++中,stack是一种容器适配器(container adapter),它提供了一种后进先出(LIFO)的数据结构。stack基于另一个容器(默认情况下是deque)来实现其操作。它的主要操作包括推入元素到栈顶、从栈顶弹出元素以及访问栈顶元素,这些操作都是在常数时间内完成的。 要使用stack容器,首先需要包含头文件<stack>。然后,你可以声明一个stack对象,并使用其成员函数来操作栈。以下是一些常用的stack操作: 1. push(element): 将元素压入栈顶。 2. pop(): 从栈顶弹出一个元素,但不返回它。 3. top(): 返回栈顶元素,但不将其从栈中移除。 4. empty(): 检查栈是否为空。 5. size(): 返回栈中元素的数量。 下面是一个简单的示例代码,演示了如何使用stack容器: ```cpp #include <iostream> #include <stack> int main() { std::stack<int> myStack; myStack.push(3); myStack.push(5); myStack.push(8); std::cout << "Size of stack: " << myStack.size() << std::endl; std::cout << "Top element: " << myStack.top() << std::endl; myStack.pop(); std::cout << "Size of stack after pop: " << myStack.size() << std::endl; return 0; } ``` 在这个示例中,我们首先创建了一个存储整数的stack对象myStack。然后,我们使用push函数将一些元素压入栈顶,并使用top函数访问栈顶元素。最后,我们使用pop函数弹出一个元素,并检查栈的大小。 希望这个简要介绍能对你有所帮助!如果你有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sanxiaochengyu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值