Skip to content

Instantly share code, notes, and snippets.

@JuniorPolegato
Last active May 29, 2020 02:46
Show Gist options
  • Save JuniorPolegato/6c8a179e5edb591578a6dd01c0e8b9bf to your computer and use it in GitHub Desktop.
Save JuniorPolegato/6c8a179e5edb591578a6dd01c0e8b9bf to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class App():
def __init__(self):
self.ui = Gtk.Builder()
self.ui.add_from_file('menu.ui')
self.ui.connect_signals(self)
self.ui.get_object('window1').show_all()
self.model = self.ui.get_object('treestore1')
self.menubar = self.ui.get_object('menubar1')
self.ids = []
with open('menu.ui') as arquivo_ui:
for linha in arquivo_ui:
pos = linha.find(' id="')
if pos != -1:
id = linha[pos + 5:linha.find('"', pos + 5)]
self.ids.append((id, self.ui.get_object(id)))
def ao_clicar_sair(self, *args):
Gtk.main_quit()
def ao_clicar_exibir(self, *args):
self.adicionar_menu_filho(self.menubar)
def adicionar_menu_filho(self, submenu, linha=None):
for item in submenu.get_children():
id = filter(lambda x: x[1] == item, self.ids)
id = id[0][0] if id else "Sem id"
i = self.model.append(linha, (item.get_label(), id))
submenu = item.get_submenu()
if submenu:
self.adicionar_menu_filho(submenu, i)
app = App()
Gtk.main()
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<object class="GtkTreeStore" id="treestore1">
<columns>
<!-- column-name Rótulo -->
<column type="gchararray"/>
<!-- column-name Id -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<property name="title" translatable="yes">Exemplo "menu para árvore"</property>
<property name="default_width">500</property>
<property name="default_height">500</property>
<signal name="delete-event" handler="ao_clicar_sair" swapped="no"/>
<child>
<object class="GtkBox" id="hbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkMenuBar" id="menubar1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="id1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Arquivo</property>
<property name="use_underline">True</property>
<child type="submenu">
<object class="GtkMenu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="id2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Arquivo _1</property>
<property name="use_underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="id3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Arquivo _2</property>
<property name="use_underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="id4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Arquivo _3</property>
<property name="use_underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="id5">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Arquivo _4</property>
<property name="use_underline">True</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="id6">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="id7">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Sai_r</property>
<property name="use_underline">True</property>
<signal name="activate" handler="ao_clicar_sair" swapped="no"/>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkMenuItem" id="id8">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Editar</property>
<property name="use_underline">True</property>
<child type="submenu">
<object class="GtkMenu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="id9">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Editar _A</property>
<property name="use_underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="id10">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Editar _B</property>
<property name="use_underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="id11">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Editar _B</property>
<property name="use_underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="id12">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Editar _C</property>
<property name="use_underline">True</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkMenuItem" id="id13">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Ver</property>
<property name="use_underline">True</property>
<child type="submenu">
<object class="GtkMenu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="id14">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">E_xibir</property>
<property name="use_underline">True</property>
<signal name="activate" handler="ao_clicar_exibir" swapped="no"/>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkMenuItem">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Aj_uda</property>
<property name="use_underline">True</property>
<child type="submenu">
<object class="GtkMenu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="id16">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Sobre</property>
<property name="use_underline">True</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="border_width">5</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTreeView">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">treestore1</property>
<property name="rules_hint">True</property>
<property name="enable_tree_lines">True</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Rótulo</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Id</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment