首页 > 其他分享 >tkinter bind command add_command函数中避免变量全局化的坑如何避免!!!!!!!!!!!!!神级解决 方案!

tkinter bind command add_command函数中避免变量全局化的坑如何避免!!!!!!!!!!!!!神级解决 方案!

时间:2023-02-02 15:55:06浏览次数:41  
标签:10 tkinter 函数 add 避免 command

for i in range(10):

  b=tkinter.Button(frame, bg=colorlist[i],font=fffff,text =labellist[i], command =lamda x: func(x))

       b.pack()

这种写法你会发现你创建了10个按钮,他们的函数全是fun(10)

这里面的机制是因为lamda函数创建的是闭包函数, 他传入的变量 i 是一个全局变量. 会共享. 所以for循环到最后只有一个i

那么我们如何避免呢. 其实很容易. 只需要函数再套一层即可.

 

def fun(i):
menubar = tkinter.Menu(frame)

def helper1(x=i):
x = i
return helloCallBack_quanbiaozhu(colorlist[x])

xxx = '全标'
menubar.add_command(label=xxx, command=helper1)
for i in range(10):
       func(i)
这样.我们外层函数传进去的1到10, 到内层函数实际使用的时候他发生值拷贝不会再共享!!!!!!!!!!!!!!!
从而达到我们需要的效果!!!!!!!!!!!!!!

代码示例:

https://github.com/zhangbo2008/bio_tool_vesion4           1触发菜单版本.py :270行

标签:10,tkinter,函数,add,避免,command
From: https://www.cnblogs.com/zhangbo2008/p/17086284.html

相关文章

  • Error running Application. Command line is too long.Shorten the command line via
    idea启动报错,错误信息:ErrorrunningApplication.Commandlineistoolong.ShortenthecommandlineviaJARmanifestorviaaclasspathfileandrerun.解决方法......
  • Command line arguments (argc, argv in main function)
    argc(ARGumentCount)isintandstoresnumberofcommand-lineargumentspassedbytheuserincludingthenameoftheprogram.Soifwepassavaluetoaprog......
  • 【解决方案】多线程如何避免重复插入
    【先记录,日后完善验证】1、设置唯一键,如果是插入或更新操作可以增加trycatch,把更新的sql写在catch里面;2、synchornized关键字和lock接口,但是只能用于单机;4、多服务可......
  • 高效NumPy操作,避免不必要数组复制
    了解NumPy的内部原理,避免不必要的数组复制来源于:​ ​​​​IPythonCookbook,SecondEdition​​​​​,by ​​​​CyrilleRossant​​​​▶  ​​CodeonGitHub......
  • 爬虫工具(tkinter+scrapy+pyinstaller)
    需求介绍输入:关键字文件,每一行数据为一爬取单元。若一行存在多个and关系的关键字,则用|隔开处理:爬取访问6个网站的推送,获取推送内容的标题,发布时间,来源,正文第一段(不是图片......
  • 初试tkinter
    才学了tkinter,感觉好炫酷的样子。但做的有点简陋,还有很多需要改进的地方。大家一起学习,一起进步呀!fromtkinterimport*fromprettytableimportPrettyTableimporto......
  • 这几个步骤,让你的电脑避免卡顿~
    C盘主要是系统运行的存储空间,如果C盘装满了东西,那就意味着电脑的存储空间小,电脑运行就会更慢。......
  • 运行 提示command not found 命令不存在 安装lsb_release
    问题在运行lsb_release提示命令不存在通过命令行yuminstalllsb_release安装后任然提示未找到命令yuminstalllsb_release查找哪个源包含这个命令yumprovides*/lsb_rele......
  • 使用prometheus来避免Kubernetes CPU Limits造成的事故
    使用prometheus来避免KubernetesCPULimits造成的事故译自:UsingPrometheustoAvoidDisasterswithKubernetesCPULimits本文将介绍Kubernetes的resourcelimits是......
  • 如何避免内存泄漏
    对于任何使用C语言的人,如果问他们C语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏。这些的确是消耗了开发人员大多数调试时间的事项。指针和内存泄漏对某些......