【问题标题】:How to get text from Entry widget如何从 Entry 小部件中获取文本
【发布时间】:2015-05-10 22:49:22
【问题描述】:

我在 stackOverflow 上查看了几篇解释答案的帖子,但无论我使用哪个,我都无法从我的条目小部件中获取字符串;它只是检测到一串“”

这是我的代码:

def buttonTest():
    global score
    gui.title("Test")
    for child in gui.winfo_children():
        child.destroy()
    global questionText
    global questionAnswer
    questionText = StringVar()
    questionAnswer = 0    
    question = Label(gui, textvariable = questionText, fg = "black", bg = "white")
    question.grid(row = 0, column = 1)
    userInput = StringVar()
    input = Entry(gui, textvariable = userInput)
    input.grid(row = 1, column = 0)

swapQuestion()

checkAns = Button(text = "Check answer", command = partial(checkAnswer, userInput.get(), questionAnswer), fg = "black", width=10)
checkAns.grid(row = 1, column = 2)

【问题讨论】:

标签: python-3.x tkinter tk


【解决方案1】:

请阅读并遵循此 SO help page。您的代码缺少运行所需的行,并且包含与您的问题无关的行。它也缺少缩进。

您的问题是您在创建按钮时只调用一次userInput.get(),然后用户才能输入任何内容。当时它的值确实是''。您必须在每次按下按钮时调用的按钮命令函数中调用它。

这是一个既能运行又能工作的最小完整示例。

import tkinter as tk

root = tk.Tk()

user_input = tk.StringVar(root)
answer = 3

def verify():
    print(int(user_input.get()) == answer)  # calling get() here!

entry = tk.Entry(root, textvariable=user_input)
entry.pack()
check = tk.Button(root, text='check 3', command=verify)
check.pack()

root.mainloop()

【讨论】:

  • 啊,谢谢你的澄清,我只是把代码从程序中取出来,因为这是有问题的代码——当我把它粘贴到这里时,缩进一定已经改变了。然而,这解释了我的问题,谢谢:D
  • 从命令行运行代码时需要 root.mainloop,但对于本实验,从空闲编辑器运行时不需要。
  • @TerryJanReedy 但我认为,您甚至不应该从 IDLE 运行 Tkinter 应用程序作为愚蠢的规则。
  • @Rinzler 除了文本模式应用程序可以通过控制台(shell)显示 unicode 的完整 BMP 子集,我同意应用程序不应通过 Idle 运行以供生产使用,之后发展。但是对于交互式开发,尤其是对于 tkinter 小部件属性和布局而言,Idle 是很棒的,而不是愚蠢的。例如,如果在没有mainloop() 调用的情况下运行上面的代码,则可以交互地操作甚至添加小部件。例如,>>> check['text'] = 'new-title' 立即更改 tk 窗口中的按钮标题。或者试试>>> check.pack(side='right')
猜你喜欢
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 2019-05-25
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多