tkinter:回调没有返回值?

时间:2017-11-14 11:10:01

标签: python python-3.x tkinter callback

我的功能没有返回我在按钮点击时输入到输入框中的任何值:

from tkinter import *    
import os


def onclick2():    
    val = box.get()
    return(val)    
root = Tk()    
box = Entry(root)    
box.pack()    
buttonfortxtbox = Button(root, text="Check Result", font=('Cooper Black', 9), bd=10, width=20,command=onclick2)    
buttonfortxtbox.pack(anchor = S)    
print(onclick2())    
root.mainloop()

2 个答案:

答案 0 :(得分:2)

您的代码没有任何问题。但你的理解并不确切:

当您运行此行时:print(onclick2())您正在尝试打印条目小部件的内容,该小部件在程序首次启动时为空。所以这是完全正常的,你没有在终端上看到任何东西。

要查看条目小部件的内容,请按以下方式稍微修改一下您的回调:

def onclick2():
    val = box.get()
    print(val)
    # You can remove "return val" as it is completely useless for your context

通过这个简单的更改,您将在终端上看到None,这与我上面描述的内容相对应。现在在条目小部件中键入内容并单击按钮:您输入的内容最终显示在输出(终端)上。

答案 1 :(得分:-1)

您正在尝试打印条目小部件的内容,但您正在使用该条目的变量来接收错误的内容。同时调用将输入窗口小部件中的内容打印到您的终端。

 from tkinter import *


def onclick2():
    val = boss.get()
    print(val)



root = Tk()

boss = StringVar() # to receive the content in the entry 

box = Entry(root , textvariable=boss)
box.pack()

buttonfortxtbox = Button(root, text="Check Result", font=('Cooper Black', 
9), bd=10, width=20,command=onclick2)
buttonfortxtbox.pack(anchor = S)

    #print(onclick2()) # don't need to call this 

root.mainloop()