【问题标题】:How do I fix the syntax in my code to make my radio buttons work with my dictionary?如何修复代码中的语法以使单选按钮与字典一起使用?
【发布时间】:2011-12-08 23:59:27
【问题描述】:

我正在尝试学习如何使用带有单选按钮的字典。我有下面的代码,但是当我运行它时,我得到一个错误。
错误说:

Traceback (most recent call last):   File "/Volumes/CHROME
USB/STORAGE/TKinker GUI/Radiobutton + Dictionary.py", line 16, in
<module>
    for i in sorted(choices.keys()): NameError: name 'choices' is not defined

这是我的代码:

from Tkinter import *
import time

class App:
    def __init__(self, master):
        w = Label(master, text="1. Anxiety, nervousness, worry or fear")
        w.pack()

    choices = {
    1: "not at all",
    2: "somewhat",
    3: "moderately",
    4: "a lot"
    }

for i in sorted(choices.keys()):
    label = "%s - %s" % (i, choices[i])
    rb=Radiobutton(master, text=label, variable=v, value=i)
    rb.pack(side=TOP, anchor="w")

    choices = {
    1: "not at all",
    2: "somewhat",
    3: "moderately",
    4: "a lot"
    }

    v = IntVar()
    Radiobutton(master, text="0 for not at all", variable=v, value=1).pack(side=TOP, anchor="w")
    Radiobutton(master, text="1 for somewhat", variable=v, value=2).pack(side=TOP, anchor="w")
    Radiobutton(master, text="2 for moderatly", variable=v, value=3).pack(side=TOP, anchor="w")
    Radiobutton(master, text="3 for a lot", variable=v, value=4).pack(side=TOP, anchor="w")

    self.button = Button(master, text="BACK", fg="red", command=self.button6)
    self.button.pack(side=BOTTOM)
    self.button = Button(master, text="NEXT", fg="red", command=self.button5)
    self.button.pack(side=BOTTOM)

    def button6(self):
        print "Sam is awesome!GAJONGA" 

    def button5(self):
        print "PYTHON FOR THE WIN! GIAN SAYS PYTHON = FILTHY" 

master = Tk()
app = App(master)
master.mainloop()

【问题讨论】:

    标签: python dictionary radio-button tkinter


    【解决方案1】:

    您没有提供关键信息——错误发生在哪一行。

    但是,您在这里似乎有一个缩进错误:

    for i in sorted(choices.keys()):
        label = "%s - %s" % (i, choices[i])
        rb=Radiobutton(master, text=label, variable=v, value=i)
        rb.pack(side=TOP, anchor="w")
    

    for 循环内的行需要缩进。

    如果修复不能解决您的问题,请对我的回答发表评论,并使用行号和已修复缩进的代码更新您的问题。


    更新问题的更新答案:

    试试这个代码:

    from Tkinter import *
    import time
    
    class App:
        def __init__(self, master):
            w = Label(master, text="1. Anxiety, nervousness, worry or fear")
            w.pack()
    
            choices = {
            1: "not at all",
            2: "somewhat",
            3: "moderately",
            4: "a lot"
            }
    
            for i in sorted(choices.keys()):
                v = IntVar()
                label = "%s - %s" % (i, choices[i])
                rb=Radiobutton(master, text=label, variable=v, value=i)
                rb.pack(side=TOP, anchor="w")
    
            self.button = Button(master, text="BACK", fg="red", command=self.button6)
            self.button.pack(side=BOTTOM)
            self.button = Button(master, text="NEXT", fg="red", command=self.button5)
            self.button.pack(side=BOTTOM)
    
        def button6(self):
            print "Sam is awesome!GAJONGA"
    
        def button5(self):
            print "PYTHON FOR THE WIN! GIAN SAYS PYTHON = FILTHY"
    
    master = Tk()
    app = App(master)
    master.mainloop()
    

    这似乎是你想要做的。仔细观察缩进以及我移动v = IntVar() 行的位置。

    【讨论】:

    • " for (i in sorted(choices.keys())):" 在这一行最后的 ":" 导致了问题。
    • 修复缩进。另外,我不知道括号是否有问题,但绝对没有必要:for i in sorted(choices.keys()): 是正确的。请参阅我编辑的答案。
    • 我用新代码和新错误编辑了我的问题。感谢您的帮助:-)
    • 我在答案中添加了固定代码。如果对您有帮助,请点击旁边的复选标记接受。
    猜你喜欢
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 2012-12-25
    相关资源
    最近更新 更多