Я пытаюсь создать простое приложение GTK с элементами управления Gtk.MenuButton и Gtk.Popover. Мой файл Glade выглядит нормально, однако я не знаю, как правильно вызывать действие при нажатии на пункт меню.
Вот пример кода:
class App(Gtk.Application):
def __init__(self):
Gtk.Application.__init__(self)
self.window = None
self.builder = Gtk.Builder()
self.builder.add_from_file("main.ui")
self.builder.connect_signals(self)
def do_activate(self):
if not self.window:
self.window = self.builder.get_object("application_window")
self.window.set_application(self)
self.window.show()
else:
self.window.present()
def on_application_window_show(self, widget):
menu = Gio.Menu()
menu.append("test_item", "win.test_item")
variant = GLib.Variant.new_string("test_item")
variant_type = variant.get_type()
test_item_action = Gio.SimpleAction.new_stateful("test_item", variant_type, variant)
test_item_action.connect("activate", self.test_item_method)
self.window.add_action(test_item_action)
interface_popover = self.builder.get_object("interface_popover")
interface_popover.bind_model(menu)
def test_item_method(self, action, value):
print("Test method:", action, value)
Как видите, я пытаюсь добавить один пункт меню. Однако, когда я запускаю свое приложение, я не могу щелкнуть по вновь добавленному элементу (он даже не подсвечивается при наведении на него мыши). Ну, нет никаких предупреждений / ошибок / исключений в консоли Python. Кажется, я не понимаю, как на самом деле работают SimpleAction
.
Самое интересное, что когда я устанавливаю variant_type
на None
, элемент активируется, моя пользовательская функция вызывается успешно, но ничего не возвращается:
Test method: <Gio.SimpleAction object at ... (GSimpleAction at ...)> None
Проблема в том, что мне действительно нужно получить эту строку. Есть ли способ исправить эту проблему?
Я следовал этим урокам: