使用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.button和event.time表示鼠标点击的按钮和时间。
on_item_activate方法是菜单项的回调函数,可以在这里处理选中菜单项的操作。在这个例子中,只是简单地打印出选中的菜单项的文本。
最后,创建一个PopUpMenu实例并运行主循环。
win = PopUpMenu()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
以上就是使用gi.repository.GioMenu()创建弹出式菜单栏的示例代码。可以运行这段代码,右键点击按钮,就会显示弹出式菜单,并在控制台中打印出选中的菜单项。
