PyGobject(十二)布局容器之Button篇——Gtk.MenuButton

Gtk.MenuButton

继承关系

Gtk.MenuButton菜单按钮,点击时可以弹出一个菜单或者气泡。Gtk.MenuButton是Gtk.ToggleButton的直接子类
这里写图片描述

Methods

方法修饰词方法名及参数
staticnew ()
get_align_widget ()
get_direction ()
get_menu_model ()
get_popover ()
get_popup ()
get_use_popover ()
set_align_widget (align_widget)
set_direction (direction)
set_menu_model (menu_model)
set_popover (popover)
set_popup (menu)
set_use_popover (use_popover)

Virtual Methods

Properties

NameTypeFlagsShort Description
align-widgetGtk.Containerr/w菜单依附在哪个父容器上.
directionGtk.ArrowTyper/w/en设置气泡弹出的位置.
menu-modelGio.MenuModelr/wThe model from which the popup is made.
popoverGtk.Popoverr/wpopover气泡
popupGtk.Menur/wmenu下拉菜单.
use-popoverboolr/w/en是否使用popover 来代替menu

Signals

NameShort Description

例子

这里写图片描述
这里写图片描述
代码:

#!/usr/bin/env python3
# Created by xiaosanyu at 16/6/14
# section 013
TITLE = "MenuButton"
DESCRIPTION = """
The Gtk.MenuButton widget is used to display a popup when clicked on.
This popup can be provided either as a Gtk.Menu, a Gtk.Popover or an abstract Gio.MenuModel.
"""
import gi

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

items = ["EditCopy", "EditPaste", "EditSomething"]


class MenuButtonWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="MenuButton Demo")
        self.set_border_width(10)
        self.set_size_request(250, 200)
        hbox = Gtk.VBox(spacing=6)
        self.add(hbox)

        button = Gtk.MenuButton("Menu Button popover")
        # 距离顶部50
        button.props.margin_top = 50
        # set_direction 如果有多余空间才会在指定的方向上显示气泡
        button.set_direction(Gtk.ArrowType.UP)
        popover = self.create_popover(button, Gtk.Label("show popover"), Gtk.PositionType.TOP)
        button.set_popover(popover)
        hbox.pack_start(button, False, False, 0)

        button = Gtk.MenuButton("Menu Button popup")
        button.props.margin_bottom = 50
        hbox.pack_end(button, False, False, 0)
        menu = Gtk.Menu.new()
        for item in items:
            item = Gtk.MenuItem(label=item)
            item.connect("activate", self.on_menu_selected)
            item.show()
            menu.append(item)
        button.set_popup(menu)

    @staticmethod
    def create_popover(parent, child, pos):
        popover = Gtk.Popover(relative_to=parent)
        popover.set_position(pos)
        popover.add(child)
        popover.set_border_width(6)
        child.show()

        return popover

    @staticmethod
    def on_menu_selected(widget, *args):
        print("Menu item " + widget.get_label() + " was selected")


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


if __name__ == "__main__":
    main()

创建第一个Gtk.MenuButton,设置距离容器顶部50

button = Gtk.MenuButton("Menu Button popover")
button.props.margin_top = 50

设置在button上方弹出气泡

button.set_direction(Gtk.ArrowType.UP)

创建一个Gtk.Popover(气泡窗口)

popover = self.create_popover(button, Gtk.Label("show popover"), Gtk.PositionType.TOP)

@staticmethod
def create_popover(parent, child, pos):
    popover = Gtk.Popover(relative_to=parent)
    popover.set_position(pos)
    popover.add(child)
    popover.set_border_width(6)
    child.show()

    return popover

设置MenuButton点击时弹出这个popover

button.set_popover(popover)

创建第二个Gtk.MenuButton

button = Gtk.MenuButton("Menu Button popup")

创建一个Gtk.Menu(菜单)

menu = Gtk.Menu.new()
for item in items:
    item = Gtk.MenuItem(label=item)
    item.connect("activate", self.on_menu_selected)
    item.show()
    menu.append(item)

绑定每一个菜单项“activate”信号,点击时执行on_menu_selected方法

@staticmethod
def on_menu_selected(widget, *args):
    print("Menu item " + widget.get_label() + " was selected")

设置MenuButton点击时弹出这个菜单

button.set_popup(menu)





代码下载地址:http://download.youkuaiyun.com/detail/a87b01c14/9594728

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

sanxiaochengyu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值