Problema con Tkinter y los metodos grid

Abel Aranda Abel.aranda en salud.madrid.org
Mar Jul 5 04:37:37 CEST 2005


Buenas noches, tengo un problema con tkinter y la colocación de diversos
botones y pantallas de texto en la aplicación:

No consigo que me aparezca una pantalla de texto bajo unos botones y no
entiendo el motivo, el bloque de texto me lo pone detrás de los botones
en vez de debajo, la cuestión es que veo ejemplos y estos funcionan bien
pero no consigo que en mi programa lo haga bien, creo que puede deberse
a la generación dinámica de botones pero no se que puede ser. 

Nota la lista de maquinas contendrá muchas mas de las que vienen aqui y
tiene que ser generada dinámicamente por lo que no puedo crearla a capón
como en el ejemplo

Si alguien me pudiera ayudar estaría muy agradecido

Aki os pongo el código

from Tkinter import *

class Maquina(Frame):
   
   def __init__(self) :
        self.nombre = ""
        self.ip = 0
        self.contador = 3
	self.activo = 1
	self.posx = 0
	self.posy = 0
   def nombre(self) :
	print self.nombre
   def ip(self) :
	print self.ip

class Pines( Frame ):
  
  
  def __init__( self, master ):
        Frame.__init__( self, master )
	self.grid()
        self.radiocheck()
	#self.textbox()

  
    
  def radiocheck (self):
    self.listaobjetos = []
    self.checkObjects = []
    self.x = 0
    self.y = 0
    global Maquinas
    for i in Maquinas:      
        self.checkObjects.append(StringVar())
        self.oneObject = Checkbutton
(text=i.nombre,variable=self.checkObjects[-1],onvalue=i.nombre,
offvalue="")
	self.listaobjetos.append(self.oneObject)
    for i,self.cb in enumerate(self.listaobjetos): 
    	self.cb.grid(column=i % 2, row=i / 2,sticky = W)
	self.x = i + 1

    self.selection_text = Text(self, width = 40, height = 10, wrap =
WORD)
    self.selection_text.grid(row = 4, column = 0, columnspan = 3)    
    

 


Maquinas = []
M = Maquina()
M.nombre = "Maquina1"
M.ip =  "10.127.0.1"
Maquinas.append(M)
M1 = Maquina()
M1.nombre = "Maquina2"
M1.ip =  "10.127.0.2"
Maquinas.append(M1)
M2 = Maquina()
M2.nombre = "Maquina3"
M2.ip =  "10.127.0.3"
Maquinas.append(M2)
root = Tk()
root.title("Pines")
app = Pines(root)
root.mainloop()



No entiendo el motivo aparente, puesto que este otro ejemplo funciona
perfectamente 


#-----------------------------------------------------------------------
-------
#           Name: radio_button_response.pyw
#         Author: Kevin Harris (kevin en codesampler.com)
#  Last Modified: 10/15/04
#    Description: This Python script demonstrates how to create radio
buttons.
#
# NOTE: To prevent a console from popping up when a Tkinter based window
is
# executed, this script uses the .pyw extension. If you want to modify
this
# script and need to output debugging information, change the extension
back
# to .py.
#-----------------------------------------------------------------------
-------

from Tkinter import *

class Application( Frame ):

    def __init__( self, master ):
        Frame.__init__( self, master )
        self.grid()
        self.create_widgets()

    def create_widgets( self ):
        # Create a string variable to bind these three radio buttons
        # together as a group.
        self.current_selection = StringVar()
        
        # Create radio button #1
        self.rbttn1 = Radiobutton( self )
        self.rbttn1["text"]     = "Radio Button #1"
        self.rbttn1["variable"] = self.current_selection,
        self.rbttn1["value"]    = "radio_button_1",
        self.rbttn1["command"]  = self.update_text
        self.rbttn1.grid( row = 2, column = 0, sticky = W )
        
        # Create radio button #2
        self.rbttn2 = Radiobutton( self )
        self.rbttn2["text"]     = "Radio Button #2"
        self.rbttn2["variable"] = self.current_selection,
        self.rbttn2["value"]    = "radio_button_2",
        self.rbttn2["command"]  = self.update_text
        self.rbttn2.grid( row = 3, column = 0, sticky = W )

        # Create radio button #3
        self.rbttn3 = Radiobutton( self )
        self.rbttn3["text"]     = "Radio Button #3"
        self.rbttn3["variable"] = self.current_selection,
        self.rbttn3["value"]    = "radio_button_3",
        self.rbttn3["command"]  = self.update_text
        self.rbttn3.grid( row = 4, column = 0, sticky = W )
	
	# Create radio button #4 
	self.rbttn4 = Radiobutton( self )
        self.rbttn4["text"]     = "Radio Button #3"
        self.rbttn4["variable"] = self.current_selection,
        self.rbttn4["value"]    = "radio_button_4",
        self.rbttn4["command"]  = self.update_text
        self.rbttn4.grid( row = 5, column = 0, sticky = W )

        # Create a text field to display the current selection
        self.selection_text = Text(self, width = 40, height = 10, wrap =
WORD)
        self.selection_text.grid(row = 6, column = 0, columnspan = 3)

    def update_text( self ):
        text = "Current selection is "
        text += self.current_selection.get()
        #self.selection_text.delete( 0.0, END )
        self.selection_text.insert( 0.0, text )
	self.rbttn3["foreground"] = "blue"
        #root.update()
	
        
#-----------------------------------------------------------------------
-------
# Script entry point...
#-----------------------------------------------------------------------
-------

if __name__ == '__main__':

    root = Tk()
    root.title("Radio Buttons Sample")
    root.geometry( "250x250" )
    app = Application(root)
    root.mainloop()




Más información sobre la lista de distribución Python-es