Criação dinamica de objetos GTK

Iniciado por Sigfried, 29 de Dezembro de 2006, 13:47

tópico anterior - próximo tópico

Sigfried

Ola pessoal
Aguem ai sabe como se cria um objeto dinamicamente utilizando o pyGTK?
exemplo:
def cria_window(nome):
  #cria o objeto em questão como nome

cria_window("Maria")
cria_window("Jose")

Entenderam ?


ginho

Eu não entendo muito disso, não sei se é py ou la o que seja, porem de uma olhada nisto
http://www.es.gnome.org/documentacion/articulos/gdialog/gdialog/index.html
Espero que seja por ai.

polo

nao sei se eu entendi bem o que voce quer, mas se for pra criar varias janelas o jeito mais simples e facil poderia ser assim:


#!/usr/bin/env python

import pygtk
import gtk

def cria_window(nome=''):
    window = gtk.Window()
    window.set_title(nome)
    window.show_all()

cria_window("Maria")
cria_window("Jose")
gtk.main()
-- Guilherme H. Polo Goncalves <ggpolo@gmail.com>

Sigfried

Desculpa pessoal, realmente não me expressei corretamente.
Suponhamos que eu tenha uma agenda, entretanto eu não sei o quanto telefone uma determinada pessoa tem, em vez de deixar vários campos para telefone (visíveis ou não) no aplicativo, eu gostaria apenas de implementar um botão para criar dinamicamente esses campos a  medida que for necessário.
Entretanto a sugestão de se fazer:

def cria_entry(texto):
entry = gtk.Entry()
entry.set_text(str(texto))

cria_entry('Texto 1')#<---primeira chamada
cria_entry('Texto 2')#<---segunda chamada

print entry.get_text() #<-------De qual Entry ele pega o texto ?
#prvavelmente do ultimo, pois a variável "entry" da função "cria_entry" foi sobreposta quando eu a chamei pela segunda vez

Ou seja, eu tenho a necessidade de criar objetos dinamicamente incluindo a variável que os contem, pois os objetos devem ser manipulados individualmente.
Eu já olhei no manual do Python e nos do pyGTK, mas não encontrei neunhuma referencia.
Se vocês puderem me ajudar ficarei grato.
;D



ginho

Tabela para telefones
indexada por nome com os campos
nome opção telefone, deduzi que isto você tem, ou +/- isso.
Certo. O que você quer é que em caso de um único número, apareça no widget apenas este número e que
em caso de esta pessoa possuir mais um número clique em um botão e este adicione mais um campo de
inclusão no formulário ai apresentando os dois números. Isso?

Sigfried

Exatamente isso!
Entretanto como já mensionado eu tenho que poder manipulalos separadamente apos serem instânciadas.

Eu encontrei uma solução que para o meu caso serviu muito bem, era só por elas dentro de uma lista, então eu chamo a lista que contem a janela em questão e controlosu

#teste criação dinamica de objetos
#teste criação dinamica de objetos
import gtk,pygtk
windows=[]
def win(title):
   c = len(windows)
   window = gtk.Window()
   window.set_title(title)
   windows.append(window)
   label = "botão"+str(c)
   button = gtk.Button(label)
   button.connect("clicked",clicked)
   window.add(button)
   window.show_all()

def clicked(self):
   self.hide()
for i in range(1,11):
   win('title')

#Modificadas apos a criação   
windows[3].set_title('eu fui modificada apos a criação')   
windows[0].set_border_width(50)
gtk.main()

Assim eu posso manipulalas individualmente, entretanto se alguem tiver uma solução mais "profissional", pois creio que há algumas função no pyGTK para esse tipo de coisa, a mesma será bem vinda.
Valeu pessoal pela ajuda !


ginho

Tipo assim.  talvez de pra entender.
Quando o widget mostra o cadastro do teu cliente, na parte do telefone você manda ele contar os registros
da tabela, e abrir tantas variáveis quanto necessárias,o que deverá ser uma, pelo menos no primeiro
registro mesmo que vazio. Quando clicar em + 1 telefone, você da um "Append" para a tabela e diz que a "opção" dela é a anterior +1. Para poder criar isto que você quer é preciso a referência do número de registros (opção) na tabela acho que é por ai.
As variáveis seriam colocadas no evento de construção do widget.
Teria que ter espaço no widget para a inclusão dos novos registros, Acho que não ia ficar bom, a idéia da
lista é melhor, na minha opinião.Ficaria mais harmonioso no final.
Espero ter ajudado. Mais que isso eu não sei.
Feliz Ano Novo!

Sigfried

#7
Pessoal eu criei uma pequena demonstração de criação dinâmica em GTK+, entretanto mesmo usa glade, então não foi possível postar o código fonte aqui.
Se alguem quiser ver é só acessar o link abaixo:
http://www.pythonbrasil.com.br/moin.cgi/CriacaoDinamicaGtk
Um grande abraço e feliz ano novo !
;)

ginho