python用for循环一直出现最后一个值_python – for循环中的lambda只占用最后一个值...

版问题:

上下文菜单应动态显示过滤器变量,并使用回调内定义的参数执行函数.

通用描述显示正确,但函数调用始终使用last set选项执行.

我尝试过的:

#!/usr/bin/env python

import Tkinter as tk

import ttk

from TkTreectrl import MultiListbox

class SomeClass(ttk.Frame):

def __init__(self, *args, **kwargs):

ttk.Frame.__init__(self, *args, **kwargs)

self.pack(expand=True, fill=tk.BOTH)

self.grid_rowconfigure(0, weight=1)

self.grid_columnconfigure(0, weight=1)

self.View=MultiListbox(self)

__columns=("Date","Time","Type","File","Line","-","Function","Message")

self.View.configure(columns=__columns, expandcolumns=(0,0,0,0,0,0,0,1))

self.View.bind("", self.cell_context)

self.View.grid(row=0, column=0, sticky=tk.NW+tk.SE)

self.__recordset = []

self.__recordset_filtered = False

#Some dummy values

self.__recordset.append(["Date", "Time", "INFO", "File", "12", "-", "Function", "Message Info"])

self.__recordset.append(["Date", "Time", "DEBUG", "File", "12", "-", "Function", "Message Info"])

self.__recordset.append(["Date", "Time", "WARNING", "File", "12", "-", "Function", "Message Info"])

self.__refresh()

def cleanView(self):

self.View.delete(0, tk.END)

def __refresh(self):

self.cleanView()

for row in self.__recordset:

self.View.insert(tk.END, *row)

def filter_records(self, column, value):

print("Filter Log Recordset by {column} and {value}".format(**locals()))

# Filter functionality works as expected

# [...]

def cell_context(self, event):

__cMenu=tk.Menu(self, tearoff=0)

if self.__recordset_filtered:

__cMenu.add_command(label="Show all", command=lambda: filter_records(0, ""))

else:

column=2

options=["INFO", "WARNING", "DEBUG"]

for i in range(len(options)):

option=options[i]

__cMenu.add_command(label="{}".format(option), command=lambda: self.filter_records(column, option))

# Also tried using for option in options here with same result as now

__cMenu.post(event.x_root, event.y_root)

if __name__=="__main__":

root=tk.Tk()

app=SomeClass(root)

root.mainloop()

我得到的当前输出是:

Filter Log Recordset by 2 and DEBUG

无论我选择哪三个选项.我认为它与垃圾收集有关,只有最后一个选项仍然存在,但我无法弄清楚如何避免这种情况.

建议任何帮助.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值