【问题标题】:Using a radio button to call a method使用单选按钮调用方法
【发布时间】:2020-06-25 11:41:18
【问题描述】:

尝试制作 9 组 4 个单选按钮,其值为 1-2-3-4。我想在单击按钮后将值相加

每当我尝试使用单选按钮调用方法时,我都会得到回溯:

  File "depression.py", line 9, in print_var
    print(var.get())
NameError: name 'var' is not defined

这是我的代码:

import tkinter as tk
from tkinter.ttk import *


def print_var():
    print(var.get())

        MODES = [
            (2, "Not at all", 1),
            (3, "Several days", 2),
            (4, "More than half the days", 3),
            (5, "Nearly everyday", 4),
            ]

        vars = []
        for r in range (2, 11):
            var = tk.StringVar()
            vars.append(var)
            for c, text, b_val in MODES:
                tk.Radiobutton(frame, text=text, variable=var, indicatoron=0, value=b_val, font=({}, 9), padx=100, pady=15, command=print_var).grid(padx=2, row=r, column=c, sticky='w')
                var.trace('w', print_var)

我不明白如何将 var 分配给变量,但后来它变得未定义?我是编码新手,我相信这很简单,但我们将不胜感激。

【问题讨论】:

  • 在这种情况下是MODES,下面的代码真的在print_var 方法中,就像它在您的问题中显示的那样?

标签: python tkinter radio-button


【解决方案1】:

很难理解问题中的代码,但我会假设MODES 和它后面的代码不是print_var 中。

var 是一个临时局部变量,不能在循环之外使用(从技术上讲它可以,但它不会像你想象的那样工作)。但是,它被添加到vars 列表中。如果你把vars设为全局(或者如果它是全局的,通过在全局范围内运行的虚拟),你可以从其他函数中访问它。

例如,要打印第一个变量的值,您可以这样做:

print(vars[0].get())

要打印所有九个变量的值,您可以这样做:

def print_vars():
    for variable in vars:
        print(variable.get())

【讨论】:

  • 非常感谢。我试图从“var”变量而不是我创建的列表中获取值。在你回答我之前花了 3 个多小时试图弄清楚。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-13
  • 2019-02-28
  • 1970-01-01
  • 2015-10-01
相关资源
最近更新 更多