Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Identificar widges/variables
#1
Buenas:

Os pongo el código de la prueba que estoy realizando primero para que quede más claro.(Una vez más ni caso de 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
import tkinter.font as tkfont



class Appprueba:
    
    def __init__(self):
        
        class Imprimir:
        
                def imp():
                    print(ttk.Button().cget('text')) # Esto no da error pero tampoco imprime nada solo un espacio vacío.
                
                def imp1():
                    print('Probando las clases')
        
        self.prin = Tk()
        self.prin.title("PRUEBA CLASS")
        self.prin.geometry('800x600+500+200')
        self.prin.resizable(False, False)
        
        self.button1 = ttk.Button(self.prin, text='20190725', command=Imprimir.imp)
        self.button1.grid(row=0, column=0, padx=5)
        
        self.button2 = ttk.Button(self.prin, text='20198968', command=Imprimir.imp1)
        self.button2.grid(row=1, column=0, padx=5)
        
        
        self.prin.mainloop()

        
        
        


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


Bien en ese código tengo una app con dos botones dentro de la cual e incluido una clase que a su vez dispone de distintos métodos/funciones. Todo funciona correctamente a excepción del primer método de la clase imprimir. (Funciona perfectamente si el código fuera:
                def imp():
                      print(self.button1.cget('text'))

Pero esto solo sirve para el botón 1 y yo lo que quiero es un método que pueda utilizar para todos los botones que vaya incluyendo en la app sin tener que crear una función con la variable específica para cada botón de la app.

¿Es esto posible?. ¿Es posible identificar los widgets en Tkinter?. Así quizá también resolvería mi problema con los datos de los entrys de los notebook que ya expuse en otro post ya que si puedo indicarle al program que texto de que widget es el que quiero añadir a la lista solucionaría mi problema. (Eso creo).


Muchas Gracias.
Responder
#2
Hola. No hay ningún método de Tk que te permita hacer eso. Yo te recomiendo que crees una lista y vayas agregando todos los botones a medidas que los creás. Luego con un simple bucle for obtenés cada uno de los textos.

Saludos
Responder
#3
(06-07-2019, 04:05 PM)Francisco escribió: Hola. No hay ningún método de Tk que te permita hacer eso. Yo te recomiendo que crees una lista y vayas agregando todos los botones a medidas que los creás. Luego con un simple bucle for obtenés cada uno de los textos.

Saludos

Muchas Gracias. Joer, me ha costado pero creo que ya he dado con el problema. No tenía muy claro como añadir los widgets a una lista. Y era tan simple como el ejemplo que me pusiste anteriormente en el otro post.

Tan sencillo como esto ¿no?:

label = ttk.Label(parent, options)
lista = [label]

He comprobado que lo que hace eso es añadir un objeto ttk.Label a la lista y ya con eso se puede trabajar aún haciendo modificaciones que sí se quedan reflejadas en la lista. Bueno, ahora solo me queda comprobar como lo hago con distintos widgets y luego pasarlos a un treeview a modo de registro. Bufff voy con ello.

MUCHÍSIMAS GRACIAS DE NUEVO.
Responder
#4
Tu código es correcto, pero mejor crear la lista vacía e ir agregando los widgets a medidas que los creás vía append(). Por ejemplo:

  1. lista = []
  2. label = ttk.Label()
  3. lista.append(label)
  4. button = ttk.Button()
  5. lista.append(button)


Luego, por ejemplo, si quieres asignar el mismo texto a todos los widgets de la lista:

  1. for widget in lista:
  2. widget["text"] = "Hola mundo"


Saludos!
Responder
#5
(08-07-2019, 03:36 PM)Francisco escribió: Tu código es correcto, pero mejor crear la lista vacía e ir agregando los widgets a medidas que los creás vía append(). Por ejemplo:

  1. lista = []
  2. label = ttk.Label()
  3. lista.append(label)
  4. button = ttk.Button()
  5. lista.append(button)


Luego, por ejemplo, si quieres asignar el mismo texto a todos los widgets de la lista:

  1. for widget in lista:
  2.    widget["text"] = "Hola mundo"


Saludos!
Gracias!!. Seguiré tú consejo.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)