【问题标题】:Lists Not Saving Entry Data Tkinter列表不保存条目数据 Tkinter
【发布时间】:2017-11-22 23:53:58
【问题描述】:

我有一个按钮来保存条目中的内容,并且由于某种原因,它没有将其正确保存到函数的列表外部中,就像函数 Submit( ),它记得输入值就好了。 这是设置条目的功能部分:

Q8answer = Entry(r)
Q8answer.config(fg = "blue",bg = "white",font = ("Arial",20),)
Q8answer.place(relx = 0.5,rely = 0.5,anchor = "center")

submit = Button(r, text = "Submit THIS Answer",command = Submit)
submit.place(relx = 0.5, rely = 0.8, anchor = "center")

这就是名为 Submit() 的函数:

def Submit():
    answers[7] = str(Q8answer.get())
    print(answers)

顺便说一句,我确实全球化了所有需要的变量,因为其他答案是带有按钮问题的多项选择( answers[0] 到 answers[6] ),都可以正常工作并正确保存到列表中。

编辑:这里有更多上下文:

    Q8answer.place_forget()
    submit.place_forget()

    Q8answer = Entry(r)
    Q8answer.config(fg = "blue",font = ("Arial",20),)

    submit = Button(r, text = "Submit THIS Answer", command = Submit() )

    Amode = 0
    Bmode = 0
    Cmode = 0
    Dmode = 0
    Abutton.config(image = unselected)
    Bbutton.config(image = unselected)
    Cbutton.config(image = unselected)
    Dbutton.config(image = unselected)

    if mode == 1:
        if questionNumber < len(questions):
            questionNumber += 1
            if questionNumber == 8:
                Correct()
            elif questionNumber == 7:
                Abutton.place_forget()
                Bbutton.place_forget()
                Cbutton.place_forget()
                Dbutton.place_forget()

                Alabel.place_forget()
                Blabel.place_forget()
                Clabel.place_forget()
                Dlabel.place_forget()

                Number = Label(r,text = "Question " + str(questionNumber + 1))
                Number.config(fg = "blue",bg = "grey", font = ("Arial",15))
                Number.place(relx = 0.02, rely = 0.02 )

                question = questions[questionNumber]
                Question.place_forget()
                Question = Label(r,text = question)
                Question.config(fg = "blue",bg = "grey")
                Question.config(font = ("Arial",20))
                Question.place(relx = 0.5, rely = 0.15, anchor = "center")

                Q8answer = Entry(r)
                Q8answer.config(fg = "blue",bg = "white",font = ("Arial",20),)
                Q8answer.place(relx = 0.5,rely = 0.5,anchor = "center")

                submit = Button(r, text = "Submit THIS Answer",command = Submit)
                submit.place(relx = 0.5, rely = 0.8, anchor = "center")
            else:
                Q8answer.place_forget()
                submit.place_forget()

在 else 语句之后,它与此没有任何关系。

【问题讨论】:

  • 你告诉我们它不能做什么。它做什么?您的打印声明打印什么?
  • len(answers) 返回什么?
  • 如果能得到minimal example 的帮助,那就太好了。你能提供更多细节吗?
  • 打印语句只是用来告诉我它是否有效。在函数内部,它可以很好地打印出答案列表,但是在外部,当我打印它时,它不包括数字 7,即带有条目小部件的那个。并且 len(answers) 返回列表答案的长度。
  • command= 需要回调 - 这意味着没有 () 的函数名称 - 但在最后的代码中你有 command = Submit() 。应该是command=Submit

标签: python list function tkinter


【解决方案1】:

我认为问题在于您设置按钮执行的命令。

以下代码示例

tk.Button(..., command=submit())

在这段代码中,命令 submit() 甚至会在主循环运行之前执行,并且在那个时间实例中, answer[7] 不存在。

只需将命令样式更改为

tk.Button(..., command=submit)

它应该可以工作。

更多——(有用的信息)

如果函数需要提供参数,则使用 lambda 关键字,如下所示::

tk.Button(..., command=lambda x: submit(x))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 2017-10-19
    • 1970-01-01
    相关资源
    最近更新 更多