更新:见下文
我一直在移植这个任务的代码:http://www.stanford.edu/class/cs221/progAssignments/PA1/search.html(整个源代码从那里作为zip提供)
从Python 2.x到3.x.注意,移植不是赋值,只是我试图使代码保持最新并避免安装另一个版本的Python …
通常的2.x – >之后3.x语法修复(打印,异常提升等),并意识到模块Tkinter现在被称为3.x(小写)中的tkinter,我遇到了陌生人的问题,这个片段和其他几个像它:
def keys_pressed(d_o_e=tkinter.tkinter.dooneevent,d_w=tkinter.tkinter.DONT_WAIT)
错误的类型如下:
AttributeError: 'module' object has no attribute 'tkinter'
我的IDE中的代码完成和变量跟踪确实似乎表明tkinter模块没有属性或子类tkinter,在其下可以引用dooneevent或DONT_WAIT.但是,在互联网上还有一些使用类似结构的人参考
_tkinter.dooneevent(_tkinter.DONT_WAIT)
将主循环向前移动,但即使像那样引用它仍然会产生相同的错误.
任何想法都非常感激.
更新:通过lambda表示法引用_root_window似乎有效,因为它在大多数情况下不再抱怨执行前的时间.然而,对于我未经训练的眼睛来说,这基本上是“神奇的”,因此我不知道这个后续错误在说什么或如何解决它.该方法现在看起来像这样,我在第一行中进行了更改:
def move_to(object, x, y=None, d_o_e=lambda arg: _root_window(arg), d_w=tkinter._tkinter.DONT_WAIT):
if y is None:
try: x, y = x
except: raise 'incomprehensible coordinates'
horiz = True
newCoords = []
current_x, current_y = _canvas.coords(object)[0:2] # first point
for coord in _canvas.coords(object):
if horiz:
inc = x - current_x
else:
inc = y - current_y
horiz = not horiz
newCoords.append(coord + inc)
_canvas.coords(object, *newCoords)
d_o_e(d_w)
我得到的错误是:
TypeError: 'Tk' object is not callable
引用定义方法的行(上面的第一行).