Buttons on a Gtk.Cellrenderer

Asked

Viewed 60 times

0

I’m trying to make a program that saves some information in a comic, I can present the information in the window without any problem, but I wanted to add 2 buttons per line an "Edit" and another "Delete", but there is no method "Cellredererbutton" only "spin, spinner, toggle, radio", I wonder how I can add this button since there is no method for it

Login.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Python 3 GTK+ 3

Arquivo LoginWin.py
"""
import gi

gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from Index import Index


class LoginWin(Gtk.Window):
    def __init__(self):
        super().__init__()
        # Título da janela.
        self.set_title('Tela de login')
        # Definindo o ícone da janela (caminho relativo ou absoluto).
        # self.set_default_icon_from_file('../../_static/favicon.png')
        # Tamanho da janela.
        self.set_default_size(1366 / 2, 768 / 2)
        # Posição em que a janela será iniciada.
        self.set_position(Gtk.WindowPosition.CENTER)
        # Definindo uma borda entre a janela principal e o container (Grid layout).
        self.set_border_width(10)

        # Grid
        grid = Gtk.Grid.new()
        grid.set_row_spacing(10)
        self.add(grid)

        self.login_txt = Gtk.Entry.new()
        self.login_txt.set_placeholder_text('Login')

        self.senha_txt = Gtk.Entry.new()
        self.senha_txt.set_placeholder_text('Senha')

        self.login_btn = Gtk.Button.new_with_label('Login')
        self.login_btn.connect('clicked', self.login)
        self.set_focus(self.login_btn)

        grid.add(self.login_txt)
        grid.attach_next_to(self.senha_txt, self.login_txt, Gtk.PositionType.BOTTOM, 1, 2)
        grid.attach_next_to(self.login_btn, self.senha_txt, Gtk.PositionType.BOTTOM, 1, 2)



        # sqlite

    def login(self, widget):
        # Escondendo a janela.
        # self.set_visible(False)
        self.hide()

        # Exibindo a outra janela e passando pra ela LoginWin(Gtk.Window).
        # Isso porque vamos precisar exibir essa janela de novo.
        Index(parent=self).show_all()


if __name__ == '__main__':
    win = LoginWin()
    win.connect('destroy', Gtk.main_quit)
    win.show_all()
    Gtk.main()

Index.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Python 3 GTK+ 3.

Arquivo Index.py.

    """
    import gi

    gi.require_version('Gtk', '3.0')
    from gi.repository import Gtk

    result_list = [(1, "Pegasus", "g****@.com", "password", "Conta", False, False),
                   (2, "gseganzrla", "g.*@.com", "senha", "Conta", False, False)]


    class Index(Gtk.Window):
        def __init__(self, parent):
            """Construtor.

            :param parent: Está recebendo LoginWin(Gtk.Window).
            """
            super().__init__()
            self.set_title('Table')
            # self.set_default_icon_from_file('../../_static/favicon.png')
            self.set_default_size(1366 / 2, 768 / 2)
            self.set_position(Gtk.WindowPosition.CENTER)
            self.set_border_width(10)

            # Atribuindo parent (LoginWin(Gtk.Window) em uma variável.
            self.parent = parent

            # Widges.
            self.grid = Gtk.Grid()
            self.grid.set_column_homogeneous(True)
            self.grid.set_row_homogeneous(True)
            self.add(self.grid)

            self.box = Gtk.Box()
            self.list_button = Gtk.Button()

            # Criando listsore
            self.result_liststore = Gtk.ListStore(int, str, str, str, str, bool, bool)
            for result_ref in result_list:
                self.result_liststore.append(list(result_ref))
                print("Resultado {}".format(result_ref))

            self.treeview = Gtk.TreeView(model=self.result_liststore)
            self.buton = Gtk.Button()
            for i, column_title in enumerate(["ID", "Usuario", "Email", "Senha", "Conta", "Editar", "Apagar"]):
                renderer = Gtk.CellRendererText()
                column = Gtk.TreeViewColumn(column_title, renderer, text=i)
                self.treeview.append_column(column)

            # sesson_destroy()
            self.session_destroy = Gtk.Button.new_with_label("Seasson Destroy")
            self.session_destroy.connect("clicked", self.encerrar_sessao)

            self.fechar = Gtk.Button(label="Fechar")
            self.fechar.connect("clicked", Gtk.main_quit)

            self.scrollable_treelist = Gtk.ScrolledWindow()
            self.scrollable_treelist.set_vexpand(True)
            self.grid.attach(self.scrollable_treelist, 0, 0, 8, 10)
            self.grid.attach_next_to(self.session_destroy, self.scrollable_treelist, Gtk.PositionType.BOTTOM, 1, 1)
            self.grid.attach_next_to(self.fechar, self.session_destroy, Gtk.PositionType.RIGHT, 1, 1)

            self.scrollable_treelist.add(self.treeview)

            self.show_all()


        def encerrar_sessao(self, widget):
            print('Encerrando a sessão')

            # Escondendo a janela.
            # self.set_visible(False)
            # self.hide()

            # Destruindo a janela.
            self.destroy()

            # Exibindo a tela de login (LoginWin(Gtk.Window)).
            # self.parent.set_visible(True)
            self.parent.show_all()

        def close(self, widget):
            print('Fechando aplicativo')

            # Encerrando o aplicativo.
            Gtk.main_quit()
  • There really is no widget CellRedererButton, in this case you would have to create a class and in that class inherit from Gtk.Cellrender and make an Overriding in the virtual methods or methods of that class. The only references I found about this were in Stack Overflow: link 1. link 2.

  • A suggestion that can make your job easier when creating screens is to create the screen in Glade and import the xml file by Gtk. It’s much faster and easier!

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.