<i id='QQ2A2'><tr id='QQ2A2'><dt id='QQ2A2'><q id='QQ2A2'><span id='QQ2A2'><b id='QQ2A2'><form id='QQ2A2'><ins id='QQ2A2'></ins><ul id='QQ2A2'></ul><sub id='QQ2A2'></sub></form><legend id='QQ2A2'></legend><bdo id='QQ2A2'><pre id='QQ2A2'><center id='QQ2A2'></center></pre></bdo></b><th id='QQ2A2'></th></span></q></dt></tr></i><div id='QQ2A2'><tfoot id='QQ2A2'></tfoot><dl id='QQ2A2'><fieldset id='QQ2A2'></fieldset></dl></div>
    1. <tfoot id='QQ2A2'></tfoot>

      <small id='QQ2A2'></small><noframes id='QQ2A2'>

        <bdo id='QQ2A2'></bdo><ul id='QQ2A2'></ul>
      1. <legend id='QQ2A2'><style id='QQ2A2'><dir id='QQ2A2'><q id='QQ2A2'></q></dir></style></legend>

        Tkinter选项菜单将命令添加到多个选项菜单

        时间:2024-08-22
        • <bdo id='eZSew'></bdo><ul id='eZSew'></ul>
                <tbody id='eZSew'></tbody>

            • <i id='eZSew'><tr id='eZSew'><dt id='eZSew'><q id='eZSew'><span id='eZSew'><b id='eZSew'><form id='eZSew'><ins id='eZSew'></ins><ul id='eZSew'></ul><sub id='eZSew'></sub></form><legend id='eZSew'></legend><bdo id='eZSew'><pre id='eZSew'><center id='eZSew'></center></pre></bdo></b><th id='eZSew'></th></span></q></dt></tr></i><div id='eZSew'><tfoot id='eZSew'></tfoot><dl id='eZSew'><fieldset id='eZSew'></fieldset></dl></div>

              <small id='eZSew'></small><noframes id='eZSew'>

              <legend id='eZSew'><style id='eZSew'><dir id='eZSew'><q id='eZSew'></q></dir></style></legend><tfoot id='eZSew'></tfoot>

                  本文介绍了Tkinter选项菜单将命令添加到多个选项菜单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  基本上我有一系列在循环中创建的OptionMenus,但当前为空:

                  option_menu = []
                  for ii in range(jj):
                      option_menu.append([])  
                      for ll in range(kk):   
                          option_menu[ii].append(OptionMenu(frame,tkinter_text_var[ii][ll],''))
                  

                  然后在其他地方,我使用复选框来设置如下行的值:

                  for ii in range(jj):
                      for ll in range(kk):   
                          option_menu[ii][ll]["menu"].add_command(label = name_from_box.get(), command = lambda: tkinter_text_var[ii][ll].set(name_from_box.get()))
                  

                  这可以正确填充所有OptionMenus,但是当我在任何OptionMenus中选择一个值时,它只设置OPTION_Menu[jj][kk](即最后设置的值)。

                  那么我做错了什么?

                  推荐答案

                  这是一个涉及闭包的非常常见问题。请看以下示例:

                  alist = [lambda : x for x in range(10) ]
                  print (alist[2]()) #9
                  print (alist[4]()) #9
                  

                  都是9。为什么?因为每个lambda函数都引用变量xx在循环的每次迭代中都会更改,但它们仍然引用同一个对象

                  解决此问题的一种方法是使用默认参数。默认参数在创建函数时求值,而不是在调用时求值。

                  alist = [lambda y=x: y for x in range(10) ]
                  print (alist[2]()) #2
                  print (alist[4]()) #4
                  

                  (做同样事情的另一种方式涉及functools.partial,您有时会看到.)

                  我经常说--"注意闭包"。它们可能有点棘手。

                  这篇关于Tkinter选项菜单将命令添加到多个选项菜单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:使用Python SDK for Azure在创建虚拟机操作中添加用户数据 下一篇:带变点的PyMC3回归

                  相关文章

                  • <bdo id='SYue2'></bdo><ul id='SYue2'></ul>

                  1. <tfoot id='SYue2'></tfoot>

                    <legend id='SYue2'><style id='SYue2'><dir id='SYue2'><q id='SYue2'></q></dir></style></legend>

                      <i id='SYue2'><tr id='SYue2'><dt id='SYue2'><q id='SYue2'><span id='SYue2'><b id='SYue2'><form id='SYue2'><ins id='SYue2'></ins><ul id='SYue2'></ul><sub id='SYue2'></sub></form><legend id='SYue2'></legend><bdo id='SYue2'><pre id='SYue2'><center id='SYue2'></center></pre></bdo></b><th id='SYue2'></th></span></q></dt></tr></i><div id='SYue2'><tfoot id='SYue2'></tfoot><dl id='SYue2'><fieldset id='SYue2'></fieldset></dl></div>
                    1. <small id='SYue2'></small><noframes id='SYue2'>