LINUX.ORG.RU

Python gtk+3, многоуровневое popup меню.

 ,


0

3

Здрастия. Вопрос о gtk+3 уровня идиота, конечно, но эти ваши гуглы не ответили. Только uimanager рекомендуют, но мне нужно на ходу генерить подпункты попап меню. Но как сделать многоуровневое меню, я так и не осилил.

Например: File->Open_recent->filename



Последнее исправление: cetjs2 (всего исправлений: 1)

Ответ на: комментарий от vertexua

Наклацать в гейде можно, только елементы меню у меня динамически генерятся, поэтому их пересоздавать надо на ходу, а глейд статику сделает.

ihasnoname
() автор топика
Ответ на: комментарий от ananas

«Menu2» теперь просто не отображается, ЧЯДНТ?

#!/usr/bin/env python
# -*- coding: utf-8 -*-


from gi.repository import Keybinder
from gi.repository import Gtk


wnd = None
menu = Gtk.Menu()


def test_func(widget):
    print "Popping up...\nwidget={}".format(widget)
    def _pos(*a):
        pos = wnd.get_position()
        print "Pos={}".format(pos)
        return pos[0], pos[1], True
    menu.popup(parent_menu_shell=None, parent_menu_item=None,
               func=_pos, button=1, activate_time=0, data=None)


if __name__ == '__main__':
    wnd = Gtk.Window()
    wnd.connect('delete-event', Gtk.main_quit)
    wnd.set_size_request(400, 320)

    m1 = Gtk.MenuItem("Menu1")
    menu.add(m1)

    m2 = Gtk.MenuItem("Menu2")
    # menu.add(m2)
    m1.set_submenu(m2)

    m3 = Gtk.MenuItem("Menu3")
    menu.add(m3)

    btn = Gtk.Button("Popup")
    wnd.add(btn)
    btn.set_size_request(80, 32)

    menu.show_all()
    btn.connect("clicked", test_func)
    wnd.show_all()

    Gtk.main()
ihasnoname
() автор топика
Ответ на: комментарий от ananas

А в том-то и суть, что я так и не нашел в какой контейнер это все добавлять. Gtk.Menu не принимает в дети Gtk.Menu - только Gtk.MenuItem. И как мне сделать несколько подуровней? Нигде в доках я этого как раз и не нашел.

ihasnoname
() автор топика
Ответ на: комментарий от ihasnoname

а что, запустить pygtk-demo да посмотреть пример, который так и называется - Menu - совершенно непосильная задача?

ananas ★★★★★
()
Ответ на: комментарий от ananas

А вот за это спасибо - разобрался. Всего-то требовалось для решения: «~$ locate pygtk-demo».

ihasnoname
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.