Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Toplevel() y tablas
#1
Shocked 
Buen dia 
Estoy haciendo una interfaz grafica con Tkinter, en el cual tengo mi ventana principal y una ventana secundaria donde se usa toplevel()
quiero colocar una tabla en la ventana secundaria pero al hacerlo la tabla se despliega en la ventana principal he buscado el como y la verdad no he encontrado una respuesta, este es el codigo que tengo (omiti las lineas de codigo de los botones, etiquetas y entradas de texto para no hacerlo muy largo), para que lo visualicen y si encuentran el error me digan en donde, muchas gracias!!!!

from Tkinter import *
import ttk
import Tkinter as tk
import sqlite3

class Product:
   #conexion con la base de datos
   db_lab = 'laboratorio.db'
   

   #ventana principal
   def __init__(self, window):
       self.wind = window
       self.wind.title('Sistema de control')
       self.wind.geometry('1080x720')

       #creando el contenedor
       frame = LabelFrame(self.wind, text = 'Elegir una de las siguientes opciones: ')
       frame.grid(row = 0, column = 0, columnspan = 3, pady = 20)
       frame.configure(background = 'gray')
       ttk.Button(frame, text = 'Registro de paciente', command = self.ventana_paciente).grid(row = 3, columnspan = 2, pady = 10, sticky = W)
        
   def ventana_paciente(self): #ventana secundaria
       self.wind_pac = tk.Toplevel()
       self.wind_pac.title = ('Registro del paciente')
       self.wind_pac.configure(background = 'gray')
       self.wind_pac.geometry('1080x720')

 
       #visualizacion de la tabla
  
       self.wind_pac = ttk.Treeview(height = 10, columns = ('1','2', '3', '4', '5'))
       self.wind_pac.grid(row = 12, column = 0, columnspan = 9)
       self.wind_pac.heading('#0', text = 'Apellido Paterno', anchor = CENTER)
       self.wind_pac.heading('#1', text = 'Apellido Materno', anchor = CENTER)
       self.wind_pac.heading('#2', text = 'Nombre', anchor = CENTER)
       self.wind_pac.heading('#3', text = 'Edad', anchor = CENTER)
       self.wind_pac.heading('#4', text = 'Sexo', anchor = CENTER)
       self.wind_pac.heading('#5', text = 'Fecha de nacimiento', anchor = CENTER)


if __name__ == '__main__':
   window = Tk()
   window.configure(background = 'gray')
   application = Product(window)
   window.mainloop()
Responder
#2
(27-05-2019, 02:30 AM)Johnny_LS escribió: Buen dia 
Estoy haciendo una interfaz grafica con Tkinter, en el cual tengo mi ventana principal y una ventana secundaria donde se usa toplevel()
quiero colocar una tabla en la ventana secundaria pero al hacerlo la tabla se despliega en la ventana principal he buscado el como y la verdad no he encontrado una respuesta, este es el codigo que tengo (omiti las lineas de codigo de los botones, etiquetas y entradas de texto para no hacerlo muy largo), para que lo visualicen y si encuentran el error me digan en donde, muchas gracias!!!!

from Tkinter import *
import ttk
import Tkinter as tk
import sqlite3

class Product:
   #conexion con la base de datos
   db_lab = 'laboratorio.db'
   

   #ventana principal
   def __init__(self, window):
       self.wind = window
       self.wind.title('Sistema de control')
       self.wind.geometry('1080x720')

       #creando el contenedor
       frame = LabelFrame(self.wind, text = 'Elegir una de las siguientes opciones: ')
       frame.grid(row = 0, column = 0, columnspan = 3, pady = 20)
       frame.configure(background = 'gray')
       ttk.Button(frame, text = 'Registro de paciente', command = self.ventana_paciente).grid(row = 3, columnspan = 2, pady = 10, sticky = W)
        
   def ventana_paciente(self): #ventana secundaria
       self.wind_pac = tk.Toplevel()
       self.wind_pac.title = ('Registro del paciente')
       self.wind_pac.configure(background = 'gray')
       self.wind_pac.geometry('1080x720')

 
       #visualizacion de la tabla
  
       self.wind_pac = ttk.Treeview(height = 10, columns = ('1','2', '3', '4', '5'))
       self.wind_pac.grid(row = 12, column = 0, columnspan = 9)
       self.wind_pac.heading('#0', text = 'Apellido Paterno', anchor = CENTER)
       self.wind_pac.heading('#1', text = 'Apellido Materno', anchor = CENTER)
       self.wind_pac.heading('#2', text = 'Nombre', anchor = CENTER)
       self.wind_pac.heading('#3', text = 'Edad', anchor = CENTER)
       self.wind_pac.heading('#4', text = 'Sexo', anchor = CENTER)
       self.wind_pac.heading('#5', text = 'Fecha de nacimiento', anchor = CENTER)


if __name__ == '__main__':
   window = Tk()
   window.configure(background = 'gray')
   application = Product(window)
   window.mainloop()

Bueno yo no soy ningún experto pero si que estoy realizando una app con bases de datos y treeviews.
 yolo que veo ahí es que estas asignado a la misma variable dos "widgets" distintos. El Top level y el Treeview.
Tampoco estas asignado el widget en el que quieres que aparezca el Treeview.

Te pongo un ejemplo de Treeview dentro de una Top level que a su vez está dentro de una Main window (Tk):
  
    styletreeviewab1 = ttk.Style()
    styletreeviewab1.configure("STTView.Treeview", font=("Ubuntu",12))
 
   # Creamos la ventana secundaria
 
  self.commentab1 = Toplevel()
    self.commentab1.title('COMENTARIOS')
    self.commentab1.geometry('1680x400')
    self.commentab1.resizable(False, False)
    
# Añadimos el frame (Caja) dónde se va a incluir el Treeview
   
self.commentframeab1 = ttk.Frame(self.commentab1)
self.commentframeab1.grid(row=0, column=0)

# Añadimos el Treeview (El primer parametro es dónde quiero que aparezca dicho Treeview, es decir en el frame que se creó dentro de la Top level)

    
    self.treecommentab1 = ttk.Treeview(self.commentframeab1, columns=('col01', 'col02'), style="STTView.Treeview")
    self.treecommentab1.grid(row=1, column=0, ipady=60)
    
    self.treecommentab1.heading('#0', text='C.A.T')
    self.treecommentab1.heading('col01', text='HORA')
    self.treecommentab1.heading('col02', text='COMENTARIOS')
    self.treecommentab1.column('#0', width=80, anchor='center')
    self.treecommentab1.column('col01', width=100, anchor='center')
    self.treecommentab1.column('col02', width=1500, anchor='w')
    
    self.exitcommentab1 = ttk.Button(self.commentframeab1, text='SALIR', style="STCT.TButton", command=exitcommentab1)
    self.exitcommentab1.grid(row=2, column=0, pady=5)
Responder
#3
Gracias por hacerme ver el error, ya que no tenia la idea en donde asignar cada widget y tampoco observaba en que parte del codigo lo tenia que indicar, no soy un experto tampoco de hecho soy un novato en Python tengo bases de programacion pero son muy basicas y quise adentrarme en este lenguaje porque me parece muy util

Gracias!!!!!
Responder
#4
Buenas:

Aprobecho este hilo que tiene que ver con Treeviews para no abrir uno nuevo.

Me estoy volviendo loco para cambiar el style de un treeview. Me ocurre algo extraño. Si lo hago en un portátil que tengo con Ubuntu no hay ningún problema el Treeview funciona correctamente. Pero en mi ordenador de sobremesa no hay manera de modificar el background ni el foreground del Treeview.

Para empezar cuando creo un Treeview en el portátil el color de fondo del mismo por defecto es el beige, mientras que si lo creo en el PC de sobremesa es blanco totalmente.

Bien os pongo el Treeview y los estilos y funciones que utilizo.

    self.styletreecclviewab = ttk.Style()
    self.styletreecclviewab.configure("STCCLView.Treeview", background='black', font=('Ubuntu', 12, 'bold'))

    def addcommentab1(event):
        
        hora = time.strftime('%H:%M:%S')
        self.treecommentab1.insert("", END, text=self.entcatab1.get(), values=(hora, self.encomentab1.get().upper()), tags=('marron'))
        self.encomentab1.delete(0, 'end')

    self.commentab1 = Toplevel()
    self.commentab1.title('COMENTARIOS')
    self.commentab1.geometry('1680x400')
    self.commentab1.resizable(False, False)
    self.commentab1.withdraw()
    
    self.commentframeab1 = ttk.Frame(self.commentab1, style="Sframe.TFrame")
    self.commentframeab1.grid(row=0, column=0)
    
    self.treecommentab1 = ttk.Treeview(self.commentframeab1, columns=('col01', 'col02'), style="ab1view.Treeview")
    self.treecommentab1.grid(row=0, column=0, ipady=60)
    
    self.treecommentab1.tag_configure('marron', background='burlywood')
    
    self.treecommentab1.heading('#0', text='C.A.T')
    self.treecommentab1.heading('col01', text='HORA')
    self.treecommentab1.heading('col02', text='COMENTARIOS')
    self.treecommentab1.column('#0', width=80, anchor='center')
    self.treecommentab1.column('col01', width=100, anchor='center')
    self.treecommentab1.column('col02', width=1500, anchor='w')
    
    self.exitcommentab1 = ttk.Button(self.commentframeab1, text='SALIR', style="STCT.TButton", command=exitcommentab1)
    self.exitcommentab1.grid(row=2, column=0, pady=5)

Bien, para empezar del style general del Treeview(self.styletreecclviewab) no me acepta nada más que el parámetro font, el background es como si no estuviera ahí.


Luego, cuando le añado el texto, me lo añade correctamente pero nada de background. Se queda completamente blanco el fondo y no lo entiendo porque como ya digo con el mismo sistema en el portátil me funciona correctamente.(Me cambia todos los parámetros, font, background, foreground).
Y es que no sé que es lo que puede estar pasando. Os mando una imagen de como queda el Treeview despues de añadir el texto desde un Entry.


Archivos adjuntos Miniatura(s)
   
Responder


Salto de foro:


Usuarios navegando en este tema: 2 invitado(s)