Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Pestañas laterales Tkinter Notebook
#1
Buenas:

Como dice el título del tema me gustaría saber si existe alguna manera de que las petañas que añadimos a un notebook en vez de hacerlo en la parte superior, se haga en un lateral o en la parte inferior.

Muchas Gracias.
Responder
#2
Hola. Sí se puede, acá tenés un ejemplo:

  1. import tkinter as tk
  2. from tkinter import ttk
  3.  
  4. root = tk.Tk()
  5. root.minsize(300, 300)
  6. root.geometry("1000x700")
  7.  
  8. s = ttk.Style()
  9. # Alineadas a la izquierda.
  10. s.configure('TNotebook', tabposition='w')
  11.  
  12. box = ttk.Notebook(root, width=1000, height=650)
  13.  
  14. tab1 = tk.Frame(root)
  15. tab2 = tk.Frame(root)
  16. tab3 = tk.Frame(root)
  17.  
  18. box.add(tab1, text="tab1")
  19. box.add(tab2, text="tab2")
  20. box.add(tab3, text="tab3")
  21.  
  22. box.pack(side=tk.TOP)
  23.  
  24. root.mainloop()


Los valores posibles para tabposition son:
  • n (arriba)
  • s (abajo)
  • w (izquierda)
  • e (derecha)
  • ne (extremo superior derecho)
  • nw (extremo superior izquierdo; este es el valor por defecto)
  • se (extremo inferior derecho)
  • sw (extremo inferior izquierdo)
  • wn (extremo izquierdo superior)
  • ws (extremo izquierdo inferior)
  • en (extremo derecho superior)
  • es (extremo derecho inferior)
Saludos
Responder
#3
Muchas gracias.

Es más fácil de lo que me esperaba
Responder
#4
Buenas:

Para no reabrir otro tema relacionado con el notebook de Tkinter lo pongo aquí:

Estoy haciendo pruebas para obtener un determinado elemento en un panel de pestañas pero soy incapaz.

Tengo esta mini aplicación(Es una prueba y por tanto es cutre y no hay que hacer caso a los import):

from tkinter import *
from tkinter import ttk
from datetime import *
from tkinter import messagebox
import time
import calendar
import psycopg2
import threading
from threading import Timer
import os
import sys
from functools import partial

class prueba:
    
    def __init__(self):
        
        self.root = Tk()
        self.root.title("PRUEBAS")
        self.root.geometry('600x300+500+200')
        
        def añadir():
            
            self.pestaña = ttk.Frame(self.cliente)
            self.cliente.add(self.pestaña, text='CLIENTE')
            
            self.nombre = ttk.Entry(self.pestaña)
            self.nombre.grid(row=1, column=0)
        
        def conseguido():
            x = self.cliente.tabs()
            
            for ele in x:
                
                self.imprime = ttk.Label(self.root, text=(self.nombre.get()))
                self.imprime.grid(row=3, column=0)
            
            
                    
        
        self.cliente = ttk.Notebook(self.root)
        self.cliente.grid(row=0, column=0)
        
        self.pestaña = ttk.Frame(self.cliente)
        self.cliente.add(self.pestaña, text='CLIENTE')
        
        self.nombre = ttk.Entry(self.pestaña)
        self.nombre.grid(row=0, column=0)
        
        self.añade = ttk.Button(self.root, text='AÑADE', command=añadir)
        self.añade.grid(row=1, column=0)
        
        self.conseguir = ttk.Button(self.root, text='CONSIGE', command=conseguido)
        self.conseguir.grid(row=2, column=0)
        
        
        
        
        
        self.root.mainloop()

def main():
    my_app = prueba()
    
if __name__ == '__main__':
    main()


Bien la idea es conseguir los nombres de todas las pestañas que figuran en los Entrys. Con lo que os mando lo único que consigo es que me imprima el nombre de la última pestaña. Siempre ignora los de las anteriores pestañas. Lo que me impide también hacer modificaciones en las pestañas anteriores a la última ya que no quedan reflejadas en la impresión. ¿Alguna idea?

Muchas Gracias.
Responder
#5
Hola. Lo ideal sería que guardes cada una de las cajas de texto que vas creando en una lista.

  1. from tkinter import *
  2. from tkinter import ttk
  3. from datetime import *
  4. from tkinter import messagebox
  5. import time
  6. import calendar
  7. import threading
  8. from threading import Timer
  9. import os
  10. import sys
  11. from functools import partial
  12.  
  13. class prueba:
  14.  
  15. def __init__(self):
  16.  
  17. self.root = Tk()
  18. self.root.title("PRUEBAS")
  19. self.root.geometry('600x300+500+200')
  20.  
  21. self.imprime = ttk.Label(self.root)
  22. self.imprime.grid(row=3, column=0)
  23.  
  24. def añadir():
  25.  
  26. self.pestaña = ttk.Frame(self.cliente)
  27. self.cliente.add(self.pestaña, text='CLIENTE')
  28.  
  29. self.nombre = ttk.Entry(self.pestaña)
  30. self.entries.append(self.nombre)
  31. self.nombre.grid(row=1, column=0)
  32.  
  33. def conseguido():
  34. self.imprime['text'] = ", ".join(
  35. entry.get() for entry in self.entries)
  36.  
  37. self.cliente = ttk.Notebook(self.root)
  38. self.cliente.grid(row=0, column=0)
  39.  
  40. self.pestaña = ttk.Frame(self.cliente)
  41. self.cliente.add(self.pestaña, text='CLIENTE')
  42.  
  43. self.nombre = ttk.Entry(self.pestaña)
  44. self.entries = [self.nombre]
  45. self.nombre.grid(row=0, column=0)
  46.  
  47. self.añade = ttk.Button(self.root, text='AÑADE', command=añadir)
  48. self.añade.grid(row=1, column=0)
  49.  
  50. self.conseguir = ttk.Button(self.root, text='CONSIGE', command=conseguido)
  51. self.conseguir.grid(row=2, column=0)
  52.  
  53.  
  54.  
  55.  
  56.  
  57. self.root.mainloop()
  58.  
  59. def main():
  60. my_app = prueba()
  61.  
  62. if __name__ == '__main__':
  63. main()


Saludos
Responder
#6
(10-04-2019, 02:19 PM)Francisco escribió: Hola. Lo ideal sería que guardes cada una de las cajas de texto que vas creando en una lista.

  1. from tkinter import *
  2. from tkinter import ttk
  3. from datetime import *
  4. from tkinter import messagebox
  5. import time
  6. import calendar
  7. import threading
  8. from threading import Timer
  9. import os
  10. import sys
  11. from functools import partial
  12.  
  13. class prueba:
  14.    
  15.    def __init__(self):
  16.        
  17.        self.root = Tk()
  18.        self.root.title("PRUEBAS")
  19.        self.root.geometry('600x300+500+200')
  20.        
  21.        self.imprime = ttk.Label(self.root)
  22.        self.imprime.grid(row=3, column=0)
  23.        
  24.        def añadir():
  25.            
  26.            self.pestaña = ttk.Frame(self.cliente)
  27.            self.cliente.add(self.pestaña, text='CLIENTE')
  28.            
  29.            self.nombre = ttk.Entry(self.pestaña)
  30.            self.entries.append(self.nombre)
  31.            self.nombre.grid(row=1, column=0)
  32.        
  33.        def conseguido():
  34.            self.imprime['text'] = ", ".join(
  35.                entry.get() for entry in self.entries)
  36.        
  37.        self.cliente = ttk.Notebook(self.root)
  38.        self.cliente.grid(row=0, column=0)
  39.        
  40.        self.pestaña = ttk.Frame(self.cliente)
  41.        self.cliente.add(self.pestaña, text='CLIENTE')
  42.        
  43.        self.nombre = ttk.Entry(self.pestaña)
  44.        self.entries = [self.nombre]
  45.        self.nombre.grid(row=0, column=0)
  46.        
  47.        self.añade = ttk.Button(self.root, text='AÑADE', command=añadir)
  48.        self.añade.grid(row=1, column=0)
  49.        
  50.        self.conseguir = ttk.Button(self.root, text='CONSIGE', command=conseguido)
  51.        self.conseguir.grid(row=2, column=0)
  52.        
  53.        
  54.        
  55.        
  56.        
  57.        self.root.mainloop()
  58.  
  59. def main():
  60.    my_app = prueba()
  61.    
  62. if __name__ == '__main__':
  63.    main()


Saludos
MUCHAS GRACIAS!!!!.

       def conseguido():
           self.imprime['text'] = ", ".join(
               entry.get() for entry in self.entries)

No entiendo muy bien esta parte. (nunca he usado .join()
Responder
#7
join() genera una nueva cadena a partir de un delimitador (en este caso, una coma y un espacio) y los elementos de una lista (que también tienen que ser cadenas). Así,

  1. ", ".join(["A", "B", "C"])


genera la cadena "A, B, C". Más info. acá: https://recursospython.com/guias-y-manua...s-cadenas/.

Saludos
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)