Como faço para implementar abas usando grid.

348 views
Skip to first unread message

Elysangela

unread,
Sep 20, 2012, 7:30:35 PM9/20/12
to python...@googlegroups.com
Ei galera como faço para usar abas com o assistente de geometria .grid?
Com o .pack fica meio limitado.
Estou fazendo um projeto usando o grid e não queria usar outro assistente de geometria.


Desde já agradeço a quem me ajudar!!!

Joao S. O. Bueno

unread,
Sep 21, 2012, 9:29:26 AM9/21/12
to python...@googlegroups.com
2012/9/20 Elysangela <elysange...@gmail.com>:
Oi Elysangela!

Deixa eu tentar te dar um help.

Começo com uma dica: como o Python tem várias
bibliotecas para criar aplicativos Desktop, quando você
for fazer uma pergunta, é melhor citar qual biblioteca
está usando (seja de desktop, ou qualquer outra
biblioteca do Python). Senão para o pessoal fica pouco
contexto, ai fica mais dificil alguém conseguir te ajudar.

Pela pergunta que voce está fazendo, eu entendi que você
está usando o Tkinter (mas nem sei se está usando
Python 2 ou Python 3). Mesmo o Tkinter sendo a única biblioteca
de desktop que é distribuida junto com Python, é melhr mencionar -
por que na verdade acontece que pouca gente, proporcionalmente,
desenvolve aplicações desktop - e quem faz as vezes prefere
usar gtk, wx widgets ou Qt.


Então - quanto a sua pergunta: eu mesmo nunca desenvolvi
uma app. grande em Tkinter -- costumo fazer coisas
corriqueiras. Mas tanto quanto eu saiba, Tkinter não
tem suporte a "abas" pronto - você tem que criar a sua.

E a forma mais direta de fazer isso é colocar uma sequencia de
botões, no alto da sua janela, que quando clicados, fazem a
aba que você quer tornar vizivel aparecer - executando
as chamadas de "grid" ou "pack" dela - e - faz as demais
abas desaparecerem, tambem fazendo uma chamada
explícita de "grid" ou "pack" para que as abas sejam
"desligadas".

Isso dito, o melhor é você colocar todos os controles de
uma dada aba, dentro de um objeto "Frame" (Tkinter.Frame) -
ai você só tem que se preocupar, para cada aba, em
tornar visível ou esconder esse Frame.

Exemplo:

http://pastebin.com/0xfY1SA3

# -*- coding: utf-8 -*-
import Tkinter
from Tkinter import Tk, Frame, Button, Text, Label
from functools import partial

TOTAL_TABS = 5
colors = "red yellow green blue white".split()
def main():
window = Tk()
frame_buttons = [Button(window, text="Frame %d" %i) for i in
range(TOTAL_TABS)]
frames = [Button(window, text="Frame %d" %i) for i in range(TOTAL_TABS)]
for i in range(TOTAL_TABS):
frame_buttons[i].grid(row=0, column=i)
frame_buttons[i]["command"] = partial(change_tab, frames, i)
label = Label(frames[i], text=u"Você está vendo o frame %d" % i)
label.grid(row=0, column=0)
text = Text(frames[i])
text.grid(row=1, column=0)
text["background"] = colors[i]
change_tab(frames,0)
Tkinter.mainloop()

def change_tab(frames, number):
for frame in frames:
frame.grid_forget()
frames[number].grid(column=0, columnspan=TOTAL_TABS, row=1)

if __name__ == "__main__":
main()


>
> --
> ------------------------------------
> Grupo Python-Brasil
> http://www.python.org.br/wiki/AntesDePerguntar
>
> <*> Para visitar o site do grupo na web, acesse:
> http://groups.google.com/group/python-brasil
>
> <*> Para sair deste grupo, envie um e-mail para:
> python-brasi...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages