Discussion:
Ventana de Tkinter con barra scroll
Manuel Malo de Molina
2007-01-29 14:51:15 UTC
Permalink
Hola a todos de nuevo,

He estado intentando sin exito poner una barra de scroll vertical a una
ventana de Tkinter toplevel normal y corriente. Consigo que aparezca, pero
no tiene ningun efecto, no mueve nada.

Por lo que he encontrado en Google deberia poner algo asi como:

scroll = Scrollbar(ventana)
scroll.pack (side=RIGHT, fill=Y)
ventana.config(yscrollcommand=scroll.set) # Error aqui, ventana no tiene
yscrollcommand
scroll.config(command=ventana.yview) # Y otro error aqui, no tiene yview
tampoco

Ese codigo era para un "canvas", lo probe para una ventana pero nada, sabeis
cuales serian los equivalentes en este caso?


Un saludo,
Manuel Malo de Molina
Ekaitz Lizundia
2007-01-29 14:58:16 UTC
Permalink
Yo el otro dia me paso lo mismo, y la mejor solucion diria yo es que hagas
un canvas, y vayas construyendo los frames dentro del canvas. El resultado
es igual.
Post by Manuel Malo de Molina
Hola a todos de nuevo,
He estado intentando sin exito poner una barra de scroll vertical a una
ventana de Tkinter toplevel normal y corriente. Consigo que aparezca, pero
no tiene ningun efecto, no mueve nada.
scroll = Scrollbar(ventana)
scroll.pack (side=RIGHT, fill=Y)
ventana.config(yscrollcommand=scroll.set) # Error aqui, ventana no tiene
yscrollcommand
scroll.config(command=ventana.yview) # Y otro error aqui, no tiene yview
tampoco
Ese codigo era para un "canvas", lo probe para una ventana pero nada, sabeis
cuales serian los equivalentes en este caso?
Un saludo,
Manuel Malo de Molina
_______________________________________________
Python-es mailing list
http://listas.aditel.org/listinfo/python-es
--
Ekaitz Lizundia Huete
Fitbak SL
Telf. 943 367098

***@fitbak.com
Manuel Malo de Molina
2007-01-30 08:18:12 UTC
Permalink
Si, eso es lo que habia intentado, salen bien en pantalla pero no
funcionan. Aqui os pongo el codigo que he utilizado:


Update = Toplevel(SteadyState.master)
Update.title('Add new information to the database')
Update.geometry('400x600')

canv = Canvas(Update, relief=SUNKEN)
canv.config(width=400, height=600)

# Puede ser aqui el fallo? no sabia que valores pone
# lo logico es que te lo calculara solo, segun el tamanho del texto
canv.config(scrollregion=(0,0,300, 1000))
canv.config(highlightthickness=0)

sbar = Scrollbar(canv)
sbar.config(command=canv.yview)
canv.config(yscrollcommand=sbar.set)
sbar.pack(side=RIGHT, fill=Y)
canv.pack(side=LEFT, expand=YES, fill=BOTH)


Y despues le imprimo unas 50 "label" con "entry"s, a su lado para que
el usuario meta informacion, todo ello sobre el Canvas, no sobre la
ventana, en una unica columna, por eso es tan importante la scrollbar.


Saludos,
Manuel
Post by Ekaitz Lizundia
Yo el otro dia me paso lo mismo, y la mejor solucion diria yo es que hagas
un canvas, y vayas construyendo los frames dentro del canvas. El resultado
es igual.
Post by Manuel Malo de Molina
Hola a todos de nuevo,
He estado intentando sin exito poner una barra de scroll vertical a una
ventana de Tkinter toplevel normal y corriente. Consigo que aparezca, pero
no tiene ningun efecto, no mueve nada.
scroll = Scrollbar(ventana)
scroll.pack (side=RIGHT, fill=Y)
ventana.config(yscrollcommand=scroll.set) # Error aqui, ventana no tiene
yscrollcommand
scroll.config(command=ventana.yview) # Y otro error aqui, no tiene yview
tampoco
Ese codigo era para un "canvas", lo probe para una ventana pero nada, sabeis
cuales serian los equivalentes en este caso?
Un saludo,
Manuel Malo de Molina
_______________________________________________
Python-es mailing list
http://listas.aditel.org/listinfo/python-es
--
Ekaitz Lizundia Huete
Fitbak SL
Telf. 943 367098
_______________________________________________
Python-es mailing list
http://listas.aditel.org/listinfo/python-es
Ekaitz Lizundia
2007-01-30 08:47:15 UTC
Permalink
Te pongo mi codigo:

from Tkinter import *

root=Tk()

frame = Frame(root, bd=2, relief=SUNKEN)
frame.pack(fill=BOTH)

xscrollbar = Scrollbar(frame, orient=HORIZONTAL)
xscrollbar.grid(row=1, column=0, sticky=E+W)

yscrollbar = Scrollbar(frame)
yscrollbar.grid(row=0, column=1, sticky=N+S)

canvas = Canvas(frame, bd=0, scrollregion=(0, 0, 1000, 1000),
xscrollcommand=xscrollbar.set,
yscrollcommand=yscrollbar.set)

xscrollbar.config(command=canvas.xview)
yscrollbar.config(command=canvas.yview)

canvas.grid(row=0, column=0, sticky=N+S+E+W)

f=Frame(canvas)
f.pack()

## AQUI PUEDES PONER TUS FRAMES Y TUS ENTRY

canvas.create_window(0,0,ancho=NW,window=f)

root.mainloop()

Asi deberia de funcionar, por lo menos a mi me funciona. Si quieres solo
el scroll vertical, el otro puedes quitar.
Post by Manuel Malo de Molina
Si, eso es lo que habia intentado, salen bien en pantalla pero no
Update = Toplevel(SteadyState.master)
Update.title('Add new information to the database')
Update.geometry('400x600')
canv = Canvas(Update, relief=SUNKEN)
canv.config(width=400, height=600)
# Puede ser aqui el fallo? no sabia que valores pone
# lo logico es que te lo calculara solo, segun el tamanho del texto
canv.config(scrollregion=(0,0,300, 1000))
canv.config(highlightthickness=0)
sbar = Scrollbar(canv)
sbar.config(command=canv.yview)
canv.config(yscrollcommand=sbar.set)
sbar.pack(side=RIGHT, fill=Y)
canv.pack(side=LEFT, expand=YES, fill=BOTH)
Y despues le imprimo unas 50 "label" con "entry"s, a su lado para que
el usuario meta informacion, todo ello sobre el Canvas, no sobre la
ventana, en una unica columna, por eso es tan importante la scrollbar.
Saludos,
Manuel
Post by Ekaitz Lizundia
Yo el otro dia me paso lo mismo, y la mejor solucion diria yo es que hagas
un canvas, y vayas construyendo los frames dentro del canvas. El resultado
es igual.
Post by Manuel Malo de Molina
Hola a todos de nuevo,
He estado intentando sin exito poner una barra de scroll vertical a
una
Post by Manuel Malo de Molina
ventana de Tkinter toplevel normal y corriente. Consigo que aparezca,
pero
Post by Manuel Malo de Molina
no tiene ningun efecto, no mueve nada.
scroll = Scrollbar(ventana)
scroll.pack (side=RIGHT, fill=Y)
ventana.config(yscrollcommand=scroll.set) # Error aqui, ventana no
tiene
Post by Manuel Malo de Molina
yscrollcommand
scroll.config(command=ventana.yview) # Y otro error aqui, no tiene
yview
Post by Manuel Malo de Molina
tampoco
Ese codigo era para un "canvas", lo probe para una ventana pero nada, sabeis
cuales serian los equivalentes en este caso?
Un saludo,
Manuel Malo de Molina
_______________________________________________
Python-es mailing list
http://listas.aditel.org/listinfo/python-es
--
Ekaitz Lizundia Huete
Fitbak SL
Telf. 943 367098
_______________________________________________
Python-es mailing list
http://listas.aditel.org/listinfo/python-es
_______________________________________________
Python-es mailing list
http://listas.aditel.org/listinfo/python-es
--
Ekaitz Lizundia Huete
Fitbak SL
Telf. 943 367098

***@fitbak.com
Manuel Malo de Molina
2007-01-30 10:29:30 UTC
Permalink
Gracias, con ese codigo si que me funciona. Ahora bien, me surgen 2
problemas, a ver si alguien me puede seguir ayudando:

- El contenido del frame (una columna de datos) sale pegado a la parte
izquierda de la nueva pantalla, no centrado en la ventana.

- Como se pueden modificar las opciones de la nueva ventana creada con
canvas.create_window? Tales como modificar el titulo, que no sea
expandible... Intente capturar la llamada en una variable, pero tan
solo es un "1".


Gracias de nuevo por toda la ayuda
Manuel

PD: No copio el codigo porque es igual que el que puso Ekaitz en el
anterior mensaje
Ekaitz Lizundia
2007-01-30 10:45:50 UTC
Permalink
No se si te he entendido bien, pero el titulo de la nueva ventana (que
supongo haras con el toplevel) no es con el canvas.create_windows.
Cuando haces el toplevel, pon:

w=Toplevel(self.master)
w.title("TITULO")
w.geometry("860x680")

Algo asi seria.

Y lo del contenido del frame, eso tendras que usar bien el .pack() o grid.
No se como lo pones. Es jugar con el pack que al final le coges el truco y
te sale.
Post by Manuel Malo de Molina
Gracias, con ese codigo si que me funciona. Ahora bien, me surgen 2
- El contenido del frame (una columna de datos) sale pegado a la parte
izquierda de la nueva pantalla, no centrado en la ventana.
- Como se pueden modificar las opciones de la nueva ventana creada con
canvas.create_window? Tales como modificar el titulo, que no sea
expandible... Intente capturar la llamada en una variable, pero tan
solo es un "1".
Gracias de nuevo por toda la ayuda
Manuel
PD: No copio el codigo porque es igual que el que puso Ekaitz en el
anterior mensaje
_______________________________________________
Python-es mailing list
http://listas.aditel.org/listinfo/python-es
--
Ekaitz Lizundia Huete
Fitbak SL
Telf. 943 367098

***@fitbak.com
Manuel Malo de Molina
2007-01-31 11:31:42 UTC
Permalink
Gracias, pensaba por error que la ventana se creaba cuando hacias el
create_window.

Chema Cortes
2007-01-30 02:29:05 UTC
Permalink
Post by Manuel Malo de Molina
He estado intentando sin exito poner una barra de scroll vertical a una
ventana de Tkinter toplevel normal y corriente. Consigo que aparezca, pero
no tiene ningun efecto, no mueve nada.
scroll = Scrollbar(ventana)
scroll.pack (side=RIGHT, fill=Y)
ventana.config(yscrollcommand=scroll.set) # Error aqui, ventana no tiene
yscrollcommand
scroll.config(command=ventana.yview) # Y otro error aqui, no tiene yview
tampoco
Ese codigo era para un "canvas", lo probe para una ventana pero nada, sabeis
cuales serian los equivalentes en este caso?
Faltaría ver más código, pero yscrollcommand y yview son atributos de
Canvas, no de Frame. Mírate los patrones de ésta página:

http://effbot.org/zone/tkinter-scrollbar-patterns.htm

También hay un widget en la librería estándar de python llamado
"ScrolledText" que simplifica los scrolles de texto.
Loading...