Discussion:
[pyar] Ayuda con Tkinter y ttk
Marcelo Bandini
2018-06-09 14:46:55 UTC
Permalink
Estimados

Pido disculpas si estoy enviando una consulta al lugar equivocado.
Estoy aprendiendo Python y a pesar de conocer otros lenguajes orientados a objetos, estoy en un callejón sin salida
 por lo menos yo no la encuentro.
En el código que adjunto, estoy tratando de colocar una scrollbar a un treeview. Pero cuando lo hago desaparece literalmente el treeview. Si comento las lineas del scrollbar el treeview se ve normalmente.
Alguien podrá ayudarme con esto?

Saludos

from tkinter import *
from tkinter import ttk
import mysql.connector

listclient = Tk()
listclient.title("Listado de Clientes")
listclient.configure(width = 800,height = 600)
listclient.resizable(1,1)

query = ("SELECT * FROM Clientes")
opcionesc1 = ["Codigo","Nombre","Apellido","Empresa","CUIT","Telefono","Mail"]
campo = StringVar(value="Nombre")
filtro = StringVar(value="")
cnx = mysql.connector.connect(user='root', password='Franco6022', host='127.0.0.1', database='Lauret')
cursor = cnx.cursor()
# Cuerpo

browsecli = ttk.Treeview(listclient,
columns = ("Codigo","Nombre","Apellido","Empresa","CUIT","Domicilio","Telefono","Mail"),
height = 30,
displaycolumns = ("Codigo","Nombre","Apellido","Empresa","CUIT","Domicilio","Telefono","Mail"),
selectmode = "browse",
)
browsecli.grid(row = 0,column = 0, columnspan = 6)

vsb = ttk.Scrollbar(listclient, orient = VERTICAL , command = browsecli.yview)




browsecli.column("#0", width = 20)
browsecli.column("Codigo", width = 50)
browsecli.column("Nombre", width = 150)
browsecli.column("Apellido", width = 150)
browsecli.column("Empresa", width = 150)
browsecli.column("CUIT", width = 100)
browsecli.column("Domicilio", width = 150)
browsecli.column("Telefono", width = 50)
browsecli.column("Mail", width = 150)

browsecli.heading("#0", option = None, text = "St")
browsecli.heading("Codigo", option = None, text = "Codigo")
browsecli.heading("Nombre", option = None, text = "Nombre")
browsecli.heading("Apellido", option = None, text = "Apellido")
browsecli.heading("Empresa", option = None, text = "Empresa")
browsecli.heading("CUIT", option = None, text = "CUIT")
browsecli.heading("Domicilio", option = None, text = "Domicilio")
browsecli.heading("Telefono", option = None, text = "Telefono")
browsecli.heading("Mail", option = None, text = "Mail")

browsecli['yscrollcommand'] = vsb.set

vsb.grid(in_ = browsecli, row=0, column=1,
sticky=(N,S)
)

cursor.execute(query)
for Cliente in cursor:
browsecli.insert('', 'end', iid=None,values = (Cliente[0],Cliente[1],Cliente[2],Cliente[3],Cliente[4],Cliente[6],Cliente[7],Cliente[8]))
cnx.close()





listclient.mainloop()

Marcelo Bandini
Socio Gerente

Tel. (+54) 9 351 5298339
Facundo Quiroga esq. Curupaiti
Córdoba - Argentina
***@gmail.com <mailto:***@gmail.com>
Carlos Miguel FARIAS
2018-06-09 23:43:51 UTC
Permalink
El treeview no es un contenedor, el scrollbar tiene que ir en su propia
columna del contenedor, en tu caso la pantalla base. Deberías colocarlo en
la columna 1 con los stickys correspondientes, para que se estire
verticalmente.
No hace falta que asignes un columspan al treeview.
Lo que tienes que hacer es configurar las columns del grid de la pantalla
base con el parámetro peso weight, para que, si cambias el ancho de la
pantalla, el treeview se estire horizontalmente y el scrollbar se mantenga
en su ancho normal.
El truco es darle a la columna 0 (donde tienes el treeview) un peso de 999
y a la columna 1 (donde el scrollbar) un peso de 1.
Saludos: Miguel, Santa Rosa (LP)


El sáb., 9 jun. 2018 a las 11:47, Marcelo Bandini (<
Post by Marcelo Bandini
Estimados
Pido disculpas si estoy enviando una consulta al lugar equivocado.
Estoy aprendiendo Python y a pesar de conocer otros lenguajes orientados a
objetos, estoy en un callejón sin salida
 por lo menos yo no la encuentro.
En el código que adjunto, estoy tratando de colocar una scrollbar a un
treeview. Pero cuando lo hago desaparece literalmente el treeview. Si
comento las lineas del scrollbar el treeview se ve normalmente.
Alguien podrá ayudarme con esto?
Saludos
from tkinter import *
from tkinter import ttk
import mysql.connector
listclient = Tk()
listclient.title("Listado de Clientes")
listclient.configure(width = 800,height = 600)
listclient.resizable(1,1)
query = ("SELECT * FROM Clientes")
opcionesc1 =
["Codigo","Nombre","Apellido","Empresa","CUIT","Telefono","Mail"]
campo = StringVar(value="Nombre")
filtro = StringVar(value="")
cnx = mysql.connector.connect(user='root', password='Franco6022',
host='127.0.0.1', database='Lauret')
cursor = cnx.cursor()
# Cuerpo
browsecli = ttk.Treeview(listclient,
columns =
("Codigo","Nombre","Apellido","Empresa","CUIT","Domicilio","Telefono","Mail"),
height = 30,
displaycolumns =
("Codigo","Nombre","Apellido","Empresa","CUIT","Domicilio","Telefono","Mail"),
selectmode = "browse",
)
browsecli.grid(row = 0,column = 0, columnspan = 6)
vsb = ttk.Scrollbar(listclient, orient = VERTICAL , command =
browsecli.yview)
browsecli.column("#0", width = 20)
browsecli.column("Codigo", width = 50)
browsecli.column("Nombre", width = 150)
browsecli.column("Apellido", width = 150)
browsecli.column("Empresa", width = 150)
browsecli.column("CUIT", width = 100)
browsecli.column("Domicilio", width = 150)
browsecli.column("Telefono", width = 50)
browsecli.column("Mail", width = 150)
browsecli.heading("#0", option = None, text = "St")
browsecli.heading("Codigo", option = None, text = "Codigo")
browsecli.heading("Nombre", option = None, text = "Nombre")
browsecli.heading("Apellido", option = None, text = "Apellido")
browsecli.heading("Empresa", option = None, text = "Empresa")
browsecli.heading("CUIT", option = None, text = "CUIT")
browsecli.heading("Domicilio", option = None, text = "Domicilio")
browsecli.heading("Telefono", option = None, text = "Telefono")
browsecli.heading("Mail", option = None, text = "Mail")
browsecli['yscrollcommand'] = vsb.set
vsb.grid(in_ = browsecli, row=0, column=1,
sticky=(N,S)
)
cursor.execute(query)
browsecli.insert('', 'end', iid=None,values =
(Cliente[0],Cliente[1],Cliente[2],Cliente[3],Cliente[4],Cliente[6],Cliente[7],Cliente[8]))
cnx.close()
listclient.mainloop()
Marcelo Bandini
*Socio Gerente*
Tel. (+54) 9 351 5298339
Facundo Quiroga esq. Curupaiti
Córdoba - Argentina
_______________________________________________
Sitio web: http://www.python.org.ar/
Para administrar la lista (o desuscribirse) entrar a
http://listas.python.org.ar/listinfo/pyar
La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
Argentina - http://www.usla.org.ar
Loading...