我只能调用一次我的定义: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()
的两个调用都有效。
我从这个网站上找到的 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()
的两个调用都有效。