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