【问题标题】:Creating several tkinter widgets in a for loop and assigning them to variables在 for 循环中创建几个 tkinter 小部件并将它们分配给变量
【发布时间】:2017-11-04 10:27:27
【问题描述】:

在一本关于 Python/tkinter 的食谱书中,我发现了这个关于如何在一个循环中创建三个 Radiobutton 小部件的 sn-p:

colors = ["Blue", "Gold", "Red"]
radVar = tk.IntVar()
radVar.set(99)                   

for col in range(3):                          
    curRad = 'rad' + str(col)
    curRad = tk.Radiobutton(win, text=colors[col],         variable=radVar,
         value=col,
         command=radCall)

    curRad.grid(column=col, row=5, sticky=tk.W)

我明白了使用循环的意义,但我希望变量curRad 被用作例如一个列表,最终包含对所有这些单选按钮的引用。这里发生了什么? Python 是否以某种方式在每次迭代中创建自定义命名的变量?对我来说,看起来我们正在将一个字符串分配给一个变量,然后将一个小部件的引用分配给同一个变量,并且在每次迭代时都做同样的事情。

我在这里错过了什么?

【问题讨论】:

    标签: python class for-loop tkinter variable-assignment


    【解决方案1】:

    我真的很喜欢你的解决方案,杰森。您可以稍后通过生成的列表的索引来引用按钮。

    您也可以按如下方式创建按钮

    for col in range(3):                          
        globals()["curRad" + str(col)] = tk.Radiobutton(win, text=colors[col], variable=radVar, value=col, command=radCall)
    

    所以与每个按钮关联的变量的名称会有所不同,在这种情况下:

    curRad0

    curRad1

    curRad2

    【讨论】:

      【解决方案2】:

      curRad = 'rad' + str(col) 行完全没有任何作用,因为变量在下一行被重新分配。

      该代码不会为您提供对单个单选按钮的任何持久引用 - 但您通常不需要一个:确定选择哪个单选按钮,或以编程方式选择一个单选按钮,是通过它们的变量 (radVar) 完成的全部分享。

      如果您真的想保留对每个按钮的引用,您可以输入:

      allRads = []
      

      在循环之上,并且:

      allRads.append(curRad)
      

      在循环内部。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-30
        • 1970-01-01
        • 1970-01-01
        • 2015-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多