【问题标题】:Extract Values from Radiobutton从单选按钮中提取值
【发布时间】:2014-08-10 03:36:01
【问题描述】:

我正在尝试使用单选按钮来允许用户选择三个选项之一。但是,我似乎无法从用户的选择中获得价值。我对 python 很陌生,我的策略可能完全不正确。两程序方法在这里正确吗?感谢您提供的任何建议!

def GetGroup():
    groupselect=tk.Tk()

    #select group
    group=IntVar()
    group.set(0)
    print(group)

    Label(groupselect,text="Select Group").grid(row=0,column=1)
    Radiobutton(groupselect,text="Group 1",width=20,variable=group,value=1,state=NORMAL).grid(row=1,column=1)
    Radiobutton(groupselect,text="Group 2",width=20,variable=group,value=2,state=NORMAL).grid(row=2,column=1)
    Radiobutton(groupselect,text="Group 3",width=20,variable=group,value=3,state=NORMAL).grid(row=3,column=1)

    group=group.get()

    Button(groupselect,text="Submit",width=20,command=lambda:GetGroup2(group)).grid(row=4,column=1)


def GetGroup2(group):

    if group==1:
        ma_group="group1"
    if group==2:
        ma_group="group2"
    if group==3:
        ma_group="group3"
    if group==0:
        ma_group="group did not update"

    print(ma_group)

【问题讨论】:

  • 不正确的缩进 - 更改它。
  • 您是否在控制台/终端中运行它以查看错误消息?您是否收到错误消息(引用)?显示它 - 所有文本 - 有问题的行数。
  • 没有错误消息,但是当我运行代码“ma_group”打印值“组没有更新”,所以“组”变量没有被单选按钮更改.. .

标签: python tkinter radio-button


【解决方案1】:

不要覆盖 Tkinter 中的某些变量

group=group.get()

因为 Tkinter 有时不是立即在小部件中分配变量,而是稍后在需要时分配变量 - 它被称为 "lazy evaluation"

因为groupRadiobutton 在同一个函数中,所以Radiobutton(如variable)将使用新的group - 不是对IntVar 的原始引用

工作示例:

from tkinter import *
import tkinter as tk

groupselect=tk.Tk()

#select group
group=IntVar()
group.set(0)
print(group)

Label(groupselect,text="Select Group").grid(row=0,column=1)
Radiobutton(groupselect,text="Group 1",width=20,variable=group,value=1,state=NORMAL).grid(row=1,column=1)
Radiobutton(groupselect,text="Group 2",width=20,variable=group,value=2,state=NORMAL).grid(row=2,column=1)
Radiobutton(groupselect,text="Group 3",width=20,variable=group,value=3,state=NORMAL).grid(row=3,column=1)

####group=group.get()

Button(groupselect,text="Submit",width=20,command=lambda:GetGroup2(group)).grid(row=4,column=1)


def GetGroup2(group):
    group = group.get() # group as local variable in `GetGroup2`
    if group==1:
        ma_group="group1"
    if group==2:
        ma_group="group2"
    if group==3:
        ma_group="group3"
    if group==0:
        ma_group="group did not update"

    print(ma_group)

【讨论】:

  • 它仍然无法正常工作,它一直在打印“组未更新”。我尝试在 GetGroup2 中创建一个名为 num 的不同变量,以便 num=group.get() 但这也没有解决它。
  • 问题是行group=group.get() in GetGroup() not in GetGroup2()
  • 我把你的例子贴进去​​了,但是没有用。 group = group.get() 现在位于 GetGroup2() 而不是 GetGroup()。还有什么我需要调整的吗?
  • 我在 Linux Mint 上使用 Python 2.7.5 和 3.3.2 尝试了我的示例,它可以工作 - 所以我不知道为什么它不适合你。
  • 好的。我使用的是 Python 3.4.0 并运行 Windows 7。必须从 3.3.2 更改为此处导致此问题,不幸的是我没有使用该版本的经验。
猜你喜欢
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 2018-10-07
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
  • 1970-01-01
相关资源
最近更新 更多