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()
“`
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:
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étodoTk()
del paquetetkinter
. El número de filas que se mostrarán en la ventana se calcula como la longitud detest_list
.A continuación, se agregan los enlaces de
test_list
a la ventana tkinter utilizando un buclewhile
. En cada iteración del bucle, se crea un nuevo widget de etiqueta (Label()
), con los valores de fila y columna adecuados especificados porrow_number
y el métodogrid()
. El argumentocursor
establece el estilo del cursor enhand2
, 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 detest_list[row_number - 1]
(es decir, el texto del enlace) como argumentopos_num
a la funcióntrack_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 argumentopos_num
. Por ejemplo, sitest_list
fuera una lista de nombres de archivos,track_and_trace()
podría usarpos_num
para abrir el archivo correspondiente en la herramienta.