我借用了我在本网站上找到的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;吨
答案 0 :(得分:1)
TkInter
不是适合控制台交互的正确库。请改用curses
。否则,如果没有定义DISPLAY变量(即不在X11中运行),程序将无法工作。我在Ubuntu 14.10上尝试过你的程序,它根本不捕获任何事件。如果我发表评论root.withdraw()
,则两次调用total()
都会有效。