2013-11-28 2 views
1
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 

...Использование Lambda и кортежи для отправки нескольких функций: Python, Tkinter

def name(self, text): 
    self.topLabel.config(text=text) 

def info(self, text): 
    self.infoLine.config(text=text) 

Я хочу использовать эти кортежи и отправить 2-ю позицию (имя элемента) к имени() (который у меня есть и работает), а 3-я позиция (вся информация о элементе) для функции info() и распечатывает их оба, но они будут находиться в разных местах. Независимо от того, что я пытаюсь, я, похоже, не могу этого сделать. Можете ли вы отправить несколько вещей, используя кортежи для разных функций?

ответ

1

В строке, вы создаете свою кнопку, вы можете сделать это либо с (глупый) лямбда-трик:

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) 

или определить отдельную функцию, которая вызывает как:

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]) 
+1

во второй предложение лучше, гораздо более понятно, что делает код –

Смежные вопросы