我只能调用一次我的定义:Python 3

I can only call my definition once: Python 3

我从这个网站上找到的 another thread 借用了一些代码,但是当我试图围绕它编写一个程序时,我发现我的一个函数只能调用一次。

import tkinter as tk

def total():
    #borrowed code vvv
    def keyDetect(event):
        root.destroy()
        if event.char == event.keysym:
            print(event.char)
        elif len(event.char) == 1:
            print(event.keysym, event.char)
        else:
            print(event.keysym)


    root = tk.Tk()
    root.bind_all('<Key>', keyDetect)
    root.withdraw()
    root.mainloop()
    #borrowed code ^^^

total()
print('test message #1')
total()

当此代码为 运行 时,定义 'total()' 第一次有效,但第二次无效。为什么?我该如何解决?

提前致谢!


编辑:

如果你完全删除定义,代码仍然不起作用

import tkinter as tk

def keyDetect(event):
    root.destroy()
    if event.char == event.keysym:
        print(event.char)
    elif len(event.char) == 1:
        print(event.keysym, event.char)
    else:
        print(event.keysym)


root = tk.Tk()
root.bind_all('<Key>', keyDetect)
root.withdraw()
root.mainloop()

print('1')
root = tk.Tk()
root.bind_all('<Key>', keyDetect)
print('2')
root.withdraw()
print('3')
root.mainloop()
print('4')

但是这样做确实说明了问题出在哪里;当此代码为 运行 时,会打印“3”,但不会打印“4”。

TkInter 不是用于控制台交互的正确库。请改用 curses。否则,如果没有定义 DISPLAY 变量,您的程序将无法运行(即当 X11 中没有 运行 时)。我在 Ubuntu 14.10 上试过你的程序,它根本没有捕获任何事件。如果我注释掉 root.withdraw(),对 total() 的两个调用都有效。