使用Lambda和tuples发送到多个函数:Python、Tkin

2024-09-28 03:19:07 发布

您现在位置:Python中文网/ 问答频道 /正文

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)

我想使用这些元组,将第二个位置(元素名)发送到name()函数(我目前拥有并正在使用),将第三个位置(所有元素信息)发送到info()函数,并将它们打印出来,但它们将位于不同的位置。不管我怎么努力,我似乎都做不到。你能用元组把多个东西发送到不同的函数吗?你知道吗


Tags: 函数textnameselfconfigdefweightcolumn1
1条回答
网友
1楼 · 发布于 2024-09-28 03:19:07

在您创建按钮的那一行,您可以使用(愚蠢的)lambda技巧来实现这一点:

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

相关问题 更多 >

    热门问题