tutorial - Usando Lambda y tuplas para enviar a Funciones MĂșltiples: Python, Tkinter
tkinter widgets (1)
En la línea en la que creas tu botón, puedes lograr esto con un truco lambda (estúpido):
tk.Button(self,text=b[0],width=5,height=2, bg="grey",
command=lambda text=b:[self.name(text[1]), self.info(text[2])] ).grid(row=r,column=c)
o define una función separada que llama a ambos:
tk.Button(self,text=b[0],width=5,height=2, bg="grey",
command=lambda text=b:self.call_both(text)).grid(row=r,column=c)
def call_both(self, line):
self.name(line[1])
self.info(line[2])
column1 = [
(''H'', ''Hydrogen'', ''Atomic # = 1/nAtomic Weight =1.01/nState = Gas/nCategory = Alkali Metals''),
(''Li'', ''Lithium'', ''Atomic # = 3/nAtomic Weight = 6.94/nState = Solid/nCategory = Alkali Metals''),
(''Na'', ''Sodium'', ''Atomic # = 11/nAtomic Weight = 22.99/nState = Soild/nCategory = Alkali Metals''),
(''K'', ''Potassium'', ''Atomic # = 19/nAtomic Weight = 39.10/nState = Solid/nCategory = Alkali Metals''),
(''Rb'', ''Rubidium'', ''Atomic # = 37/nAtomic Weight = 85.47/nState = Solid/nCategory = Alkali Metals''),
(''Cs'', ''Cesium'', ''Atomic # = 55/nAtomic Weight = 132.91/nState = Solid/nCategory = ALkali Metals''),
(''Fr'', ''Francium'', ''Atomic # = 87/nAtomic Weight = 223.00/nState = Solid/nCategory = Alkali Metals'')]
#create all buttons with a loop
r = 1
c = 0
for b in column1:
tk.Button(self,text=b[0],width=5,height=2, bg="grey",command=lambda text=b[1]:self.name(text)).grid(row=r,column=c)
r += 1
if r > 7:
r = 1
c += 1
...
def name(self, text):
self.topLabel.config(text=text)
def info(self, text):
self.infoLine.config(text=text)
Quiero usar estas tuplas y enviar la 2 ° posición (el nombre del elemento) a la función de nombre () (que actualmente tengo y funciona), y la 3 ° posición (toda la información del elemento) a la función de información (), y imprímalos a ambos, pero estarán en diferentes lugares. No importa lo que intento, parece que no puedo hacerlo. ¿Puedes enviar varias cosas usando tuplas a diferentes funciones?