es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo leer etiquetas seleccionables en tkinter.

Pregunté esta pregunta ayer de una manera demasiado larga. Ahora reduje el código al problema real.
Cuando hago clic en el enlace en la ventana, quiero leer el pos_num. De esta manera puedo obtener información de otras listas que están en el código completo.

Si puedo hacer que lo siguiente funcione, puedo implementarlo en mi herramienta.

“`python
import tkinter as tk

def track_and_trace(pos_num):
print(pos_num)

<h1>Crear lista</h1>

test_list = ["link1", "link2", "link3", "link4"]

<h1>Crear una ventana de interfaz de usuario</h1>

window = tk.Tk()

<h1>Comprobar cuántas filas obtendrá la ventana</h1>

number_of_rows = len(test_list)

<h1>Agregar valores de la lista a la ventana de tkinter</h1>

row_number = 1
while row_number <= number_of_rows:
label_link = tk.Label(window, text=test_list[row_number – 1], width=13, cursor="hand2")
label_link.grid(row=row_number, column=1, sticky='ew')
label_link.bind("<button-1>", lambda pos_num=test_list[row_number – 1]: track_and_trace(pos_num))

<pre><code>row_number += 1
</code></pre>

<h1>Iniciar el bucle de la ventana</h1>

window.mainloop()
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La reducción del código para leer el pos_num al hacer clic en un enlace en una ventana tkinter es la siguiente:

    import tkinter as tk
    
    def track_and_trace(pos_num):
        print(pos_num)
    
    test_list = ["link1", "link2", "link3", "link4"]
    window = tk.Tk()
    
    number_of_rows = len(test_list)
    
    row_number = 1
    while row_number <= number_of_rows:
        label_link = tk.Label(window, text=test_list[row_number - 1], width=13, cursor="hand2")
        label_link.grid(row=row_number, column=1, sticky='ew')
        label_link.bind("<button-1>", lambda pos_num=test_list[row_number - 1]: track_and_trace(pos_num))
    
        row_number += 1
    
    window.mainloop()
    

    En este código se crea una lista test_list con cuatro elementos, que son los enlaces que se mostrarán en la ventana tkinter. Luego, se crea una ventana tkinter utilizando el método Tk() del paquete tkinter. El número de filas que se mostrarán en la ventana se calcula como la longitud de test_list.

    A continuación, se agregan los enlaces de test_list a la ventana tkinter utilizando un bucle while. En cada iteración del bucle, se crea un nuevo widget de etiqueta (Label()), con los valores de fila y columna adecuados especificados por row_number y el método grid(). El argumento cursor establece el estilo del cursor en hand2, que da la apariencia de un hipervínculo.

    Luego, el widget de etiqueta se vincula a un evento de clic del botón izquierdo del mouse utilizando el método bind(). Este método toma dos argumentos: el evento al que se va a vincular (en este caso, "<button-1>", es decir, un clic del botón izquierdo del mouse) y la función que se va a ejecutar (lambda pos_num=test_list[row_number - 1]: track_and_trace(pos_num)). Esta función lambda pasa el valor de test_list[row_number - 1] (es decir, el texto del enlace) como argumento pos_num a la función track_and_trace().

    Finalmente, se inicia la ventana tkinter utilizando el método mainloop().

    Este código se puede implementar en una herramienta más grande modificando la función track_and_trace() para realizar las acciones deseadas con el argumento pos_num. Por ejemplo, si test_list fuera una lista de nombres de archivos, track_and_trace() podría usar pos_num para abrir el archivo correspondiente en la herramienta.

Comments are closed.