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

时间:2015-01-16 20:13:52

标签: python python-3.x tkinter definition

我借用了我在本网站上找到的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()

运行此代码时,定义&#39; total()&#39;第一次工作,但不是第二次工作。为什么?我该如何解决?

提前致谢!


编辑:

如果完全删除定义,代码仍然无效

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')

但这样做确实显示了问题所在;当这个代码运行时#34; 3&#34;印刷,但&#34; 4&#34; ISN&#39;吨

1 个答案:

答案 0 :(得分:1)

TkInter不是适合控制台交互的正确库。请改用curses。否则,如果没有定义DISPLAY变量(即不在X11中运行),程序将无法工作。我在Ubuntu 14.10上尝试过你的程序,它根本不捕获任何事件。如果我发表评论root.withdraw(),则两次调用total()都会有效。