ラムダとタプルを使って複数の関数に送る:Python、Tkinter



python 辞書 (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])
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)

私はこれらのタプルを使用して、2番目の位置(要素名)をname()関数(私が現在持っている)と3番目の要素(すべての要素情報)をinfo()関数に送りたいそれらを両方とも印刷しますが、それらは異なる場所にあります。 私が何をしようと、私はそうすることができないようです。 タプルを使って複数のものを異なる関数に送ることはできますか?





tk