欢迎访问宙启技术站
智能推送

使用gi.repository.GioMenu()在Python中创建弹出式菜单栏

发布时间:2024-01-02 14:14:06

弹出式菜单是一种常见的用户界面元素,用于在用户点击鼠标右键或其他特定操作时显示一个选项列表。在Python中,可以使用gi.repository.GioMenu()来创建弹出式菜单栏。

首先,需要导入必要的模块及类:

from gi.repository import Gtk, Gio

接下来,可以创建一个弹出式菜单栏的类,并定义一个用于创建菜单项的函数。

class PopUpMenu(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Pop Up Menu")

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

        button = Gtk.Button(label="Right-click Here")
        button.connect("button-press-event", self.on_button_press)
        vbox.pack_start(button, True, True, 0)

    def on_button_press(self, widget, event):
        if event.button == 3:  # Right mouse click
            self.create_menu(widget, event)

    def create_menu(self, widget, event):
        menu = Gio.Menu()

        item1 = Gio.MenuItem.new_with_label("Item 1")
        item1.connect("activate", self.on_item_activate)
        menu.append_item(item1)

        item2 = Gio.MenuItem.new_with_label("Item 2")
        item2.connect("activate", self.on_item_activate)
        menu.append_item(item2)

        item3 = Gio.MenuItem.new_with_label("Item 3")
        item3.connect("activate", self.on_item_activate)
        menu.append_item(item3)

        menu.popup(None, None, None, None, event.button, event.time)

    def on_item_activate(self, widget):
        item_name = widget.get_label()
        print("Item selected:", item_name)

在上面的代码中,创建了一个名为PopUpMenu的类,继承自Gtk.Window。在__init__方法中,初始化了Gtk.Window并创建了一个垂直的Gtk.Box,然后将一个Gtk.Button添加到该Gtk.Box中。当按钮被按下时,会调用on_button_press方法。

on_button_press方法中,判断如果是鼠标右键点击,则调用create_menu方法创建弹出式菜单。

create_menu方法中,首先创建一个Gio.Menu实例。然后,使用Gio.MenuItem.new_with_label创建三个菜单项,并将它们连接到on_item_activate方法。接下来,将菜单项添加到菜单中。

最后,使用menu.popup方法来显示弹出式菜单。这个方法接受多个参数,如父窗口、事件位置等。在这里,我们将它们设置为None,以使用默认值。event.buttonevent.time表示鼠标点击的按钮和时间。

on_item_activate方法是菜单项的回调函数,可以在这里处理选中菜单项的操作。在这个例子中,只是简单地打印出选中的菜单项的文本。

最后,创建一个PopUpMenu实例并运行主循环。

win = PopUpMenu()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

以上就是使用gi.repository.GioMenu()创建弹出式菜单栏的示例代码。可以运行这段代码,右键点击按钮,就会显示弹出式菜单,并在控制台中打印出选中的菜单项。