Nesta parte, veremos como criar outra janela e projetá-la com GTK. Veremos também algumas funcionalidades como adicionar perguntas e usar os três botões (50%, congelar e passar).
ToolBar e ToolButton
Crie uma barra de ferramentas:
Criando um ToolButton, neste caso iremos colocar um ícone (você pode encontrar muitos ícones por padrão clique aqui) com «from_stock (Gtk.Stock.IconName):
Podemos ver que em nosso aplicativo temos no topo uma barra com dois botões, onde usaremos o primeiro para criar novas questões e o segundo para importar questões (através de um arquivo):
Criando perguntas:
O botão que criamos anteriormente (na barra de ferramentas) ao clicar nele, abriremos uma nova janela gtk que nos permitirá adicionar perguntas ao nosso banco de dados:
Para criar uma nova janela, criaremos uma nova classe, que chamaremos de Perguntas, e como nossa classe App criará uma nova janela (this.window = new Gtk.Window ();)
Usaremos alguns componentes para criar a interface gráfica em ordem;
-Label (perguntas)
- Entrada (onde escreveremos a pergunta)
-Label (respostas)
- 4 caixas horizontais que conterão uma entrada (a resposta) e um interruptor (para selecionar se está correto)
-Botão (para completar)
Podemos ver como fica:
Para salvar a questão, teremos que obter o texto das entradas, elas são obtidas com get_text () que retorna uma string.
Para saber se um switch está ativo, podemos usar seu método get_active () que retorna verdadeiro se estiver ativado e piscar se estiver desativado.
50%, botões Congelar e Passar:
-cinquenta% :
Para 50% só temos que olhar qual é o botão correto e remover 2 que não estão corretos, neste caso cancelamos com set_sensitive (false).
resultado:
-Congelar:
Definimos a barra para 0 novamente.
this.timebar.set_fraction (0);
-Passar:
button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});
Próxima parte (4):
No próximo capítulo veremos como melhorar aspectos do nosso aplicativo, como por exemplo, que as perguntas nem sempre apareçam na mesma posição, coloque um ícone no aplicativo ...
Eu amo as respostas ... haha .. Saudações
Muito bons esses artigos sobre vala .. Espero os outros .. saudações
Estou aguardando sua entrada no Vala, espero que haja muitas entregas. Felicidades!
Bom artigo, obrigado por compartilhar.
Olá,
Eu segui suas entradas anteriores para a criação deste aplicativo, o problema surge agora que eu tento acessar as entradas da nova janela, eu faço dessa forma, no método saveC da classe createQuestions (classe que cria a janela) .
public void saveC () {
string str = questionE.get_text ();
stdout.printf ("Tratado% s \ n", str);
}
Mas na saída, recebo o seguinte:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: asserção `GTK_IS_ENTRY (entrada) 'falhou
Tratado (nulo)
Eu vi alguns exemplos e na definição dos métodos que acessam as entradas eles fazem algo assim:
void on_activate (entrada Gtk.Entry) {
nome = entrada.get_texto ();
print ("\ nOlá" + nome + "! \ n \ n");
}
Mas eles só têm uma entrada e neste exemplo são 5, então aqui estou eu já perdido, vocês poderiam me orientar melhor.
Bem, quando você cria as entradas, você não dá a elas o mesmo nome, para obter o texto que elas têm você faz:
r1 = entrada1.get_text ();
r2 = entrada2.get_text ();
r3 = entrada3.get_text ();
r4 = entrada4.get_text ();
Se você quiser, coloque um pastebin e eu vou dar uma olhada
lolbimbo se de fato os tenho com nomes diferentes, mas só estou usando um para testes, pois nenhum deles retorna o texto que coloquei na entrada, me envia o erro citado acima:
Mas na saída, recebo o seguinte:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: asserção `GTK_IS_ENTRY (entrada) 'falhou
Tratado (nulo)
Ainda estou investigando ...
Felicidades.!!
Pronto aqui está a fonte, saudações.
http://pastebin.com/pZG8GbrY
Oi Hiram, olha, vou te dizer como você tem que fazer pra resolver, a primeira coisa é que estamos criando uma nova janela (não é a principal), e ao chamar o verbete, (desculpem o palavras) Essa merda não retorna como se fosse uma entrada, mas um widget, mas hey, para resolver isso você só precisa mudar todos os componentes estáticos que você criou para dinâmico usando var:
var questionE = new Gtk.Entry ();
então a função funcionará e você receberá o texto dentro da entrada.
save.clicked.connect (() => {
// string str = this.questionE.get_text ();
stdout.printf ("Tratado% s \ n", askE.get_text ());
});
Finalmente, não se esqueça de alterar a linha onde você adiciona a entrada para mostrá-la:
askE.show ();
Deixo-vos o código completo com a modificação para que possam verificar se já funciona, ou seja, se é necessário alterar todos os elementos (pelo menos as entradas) para continuar com a aplicação.
http://paste.desdelinux.net/5048
lembranças
Chale, aqui atrapalhando de novo, continuo tendo problemas, o código que você me mostra está bom, só acontece alguma coisa no evento:
save.clicked.connect (() => {
// string str = this.questionE.get_text ();
stdout.printf ("Tratado% s \ n", askE.get_text ());
});
Está dentro da classe Questions e está tudo bem, mas ao querer entrar do saveC, ele não compila, me lança este erro:
bu01.vala: 50.38-50.50: erro: Argumento 1: Não é possível converter de `Questions.saveC 'para` Gtk.Button.clicked'
this.guardar.clicked.connect (this.guardarC);
^^^^^^^^^^^^^^
bu01.vala: 251.58-251.66: aviso: Gtk.Stock foi descontinuado desde 3.10
bu01.vala: 260.59-260.67: aviso: Gtk.Stock foi descontinuado desde 3.10
A compilação falhou: 1 erro (s), 2 aviso (s)
Quero pensar que é por causa da maneira como passo o parâmetro quando ocorre o evento de clique:
this.guardar.clicked.connect (this.guardarC);
Agradecemos antecipadamente o feedback; deixo aqui o código que gera o erro: http://pastebin.com/pLzExhrb
Não tentei, mas acho que remover o argumento da função irá jogá-lo fora.
public void saveC (Gtk.Entry pedeE) {
string str = questionE.get_text ();
stdout.printf ("Tratado% s \ n", str);
}
a:
public void saveC () {
string str = questionE.get_text ();
stdout.printf ("Tratado% s \ n", str);
}
lolbimbo, eu tentei remover o argumento e ainda não funciona,
Ainda estou tentando entender o problema, sou novo na Vala e não consigo encontrar muita documentação, espero encontrar a solução logo ou aguardo vocês lançarem a quarta parte xD.
Eu continuo tentando ...
Saudações.