Python Tkinter IntVar未更新

时间:2014-11-26 05:50:21

标签: python-3.x tkinter

我有两个函数是Python 3.4.1 Tkinter GUI的一部分。

def jumpto():
    global jump
    jump = Tk()
    jump.wm_title("Jump")
    jump.focus_force()
    label = Label(jump, text = "Enter digit to jump:").pack()
    global jumptext
    jumptext = IntVar()
    jumpentry = Entry(jump, textvariable = jumptext)
    jumpentry.pack()
    jump.bind("<Return>", close)

def close(self):
    global jumptext
    global jump
    print(jumptext.get())
    while digit < jumptext.get(): #digit is an integer that increases in the unrelated area below
        #Do something completely unrelated
    jump.destroy()

jButton = Button(master, text = "JUMP", command = jumpto).pack() #master is the main Tk window

但是,当我运行代码时,jumptext.get()中的close仍然为0,尽管在使用jumpentry创建的输入框中输入了某些内容。有何方法使输入的信息实际更新为jumptext.get()

此外,如果有人可以向我解释为什么必须在self内输入close,那将是一个奖励。

提前致谢!

1 个答案:

答案 0 :(得分:1)

问题是你正在制作Tk()的两个实例,这会导致奇怪的行为。 jump窗口应该是Toplevel窗口,如果您希望在Tk()窗口旁边显示另一个窗口,则可以使用该窗口。

close需要接受一个参数,因为它由一个bind调用,它总是传递一个event对象,其中包含有关触发{{1}的事件的各种信息。函数(鼠标位置和用于触发事件的键)。因此,将其称为close而不是event实际上会更正确。 self是包含类属性的类中使用的变量。