Dúvida: C++/Python/GTK: Como fazer o Gtk::Grid ocupar toda a Janela? [RESOLVIDO]

1. Dúvida: C++/Python/GTK: Como fazer o Gtk::Grid ocupar toda a Janela? [RESOLVIDO]

M.
XProtoman

(usa Fedora)

Enviado em 14/10/2017 - 14:55h

Boa tarde a todos,

Estou com dúvida de como fazer o Gtk::Grid ocupar toda a área da Janela, até mesmo quando redimensionado.

Segue um exemplo de código e da minha tentativa:
#include <gtkmm.h>

int main(int argc, char *argv[])
{
Glib::RefPtr <Gtk::Application> aplicacao = Gtk::Application::create(argc, argv, "Teste.com");
Gtk::Window janela;
Gtk::Grid grade;
Gtk::Button botao;
botao.set_label("Botão");
grade.attach(botao, 0, 0, 1, 1);
// Tentativas de ocupar toda a janela
grade.set_hexpand(true);
grade.set_vexpand(true);
grade.set_halign(Gtk::ALIGN_FILL);
grade.set_valign(Gtk::ALIGN_FILL);
// Continuação do código
botao.show();
grade.show();
janela.show();
janela.add(grade);
return aplicacao->run(janela);
return 0;
}


Para compilar use: g++ `pkg-config --cflags --libs gtkmm-3.0` teste.cpp -o teste.run



  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 18/10/2017 - 20:00h

Se descobrir, avise. Eu tive o mesmo problema num programa de estes que fiz há alguns meses, para comparar Qt e GTK, e esse bug foi um dos pontos fracos do GTK+.

Sem a solução para isso, acaba não compensando tanto usar o Glade para deixar a interface bem ajustada.

3. Re: Dúvida: C++/Python/GTK: Como fazer o Gtk::Grid ocupar toda a Janela? [RESOLVIDO]

M.
XProtoman

(usa Fedora)

Enviado em 18/10/2017 - 15:47h

Mesmo problema em Python:

#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

botao = Gtk.Button();
botao.set_label("Botão");
botao.show();
grade = Gtk.Grid();
grade.attach(botao, 0, 0, 1, 1);
# Início das minhas tentativas
grade.set_hexpand(True);
grade.set_vexpand(True);
grade.set_halign(Gtk.Align.FILL);
grade.set_valign(Gtk.Align.FILL);
# Fim das minhas tentativas
grade.show();
janela = Gtk.Window();
janela.connect("delete-event", Gtk.main_quit);
janela.add(grade);
janela.show();
Gtk.main();


____________________
“Mas nós sabemos que a razão de a maioria estar aqui, é a nossa afinidade com a desobediência!” (Morpheus)


4. Re: Dúvida: C++/Python/GTK: Como fazer o Gtk::Grid ocupar toda a Janela? [RESOLVIDO]

M.
XProtoman

(usa Fedora)

Enviado em 18/10/2017 - 20:09h

paulo1205 escreveu:

Se descobrir, avise. Eu tive o mesmo problema num programa de estes que fiz há alguns meses, para comparar Qt e GTK, e esse bug foi um dos pontos fracos do GTK+.

Sem a solução para isso, acaba não compensando tanto usar o Glade para deixar a interface bem ajustada.

Paulo, boa noite,

Mais uma vez obrigado por responder um tópico meu, quando você falou no Glade fui dar um olhada nele de novo e acho que acabo de descobrir a solução:

grade.set_row_homogeneous(true);
grade.set_column_homogeneous(true);


Código completo:

#include <gtkmm.h>

int main(int argc, char *argv[])
{
Glib::RefPtr <Gtk::Application> aplicacao = Gtk::Application::create(argc, argv, "Teste.com");
Gtk::Window janela;
Gtk::Grid grade;
Gtk::Button botao;
botao.set_label("Botão");
grade.attach(botao, 0, 0, 1, 1);
// Tentativa inicial
//grade.set_hexpand(true);
//grade.set_vexpand(true);
//grade.set_halign(Gtk::ALIGN_FILL);
//grade.set_valign(Gtk::ALIGN_FILL);
// Tentativa que deu certo
grade.set_row_homogeneous(true);
grade.set_column_homogeneous(true);
// Continuação do código
botao.show();
grade.show();
janela.show();
janela.add(grade);
return aplicacao->run(janela);
return 0;
}


Comando para compilar:
g++ `pkg-config --cflags --libs gtkmm-3.0` teste.cpp -o teste.run 


Obrigado por mais uma vez por fazer pensar fora da caixa e encontrar a solução.

EDIT: É isso mesmo, testei numa aplicação que estou escrevendo e deu o efeito de usar toda a janela.

____________________
“Mas nós sabemos que a razão de a maioria estar aqui, é a nossa afinidade com a desobediência!” (Morpheus)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts