Я переносил код для этого назначения: http://www.stanford.edu/class/cs221/ progAssignments / PA1 / search.html (весь исходный код доступен в виде zip-архива оттуда) от Python 2.x до 3.x.Обратите внимание, перенос - это не назначение, просто я пытаюсь поддерживать код в актуальном состоянии и избегать установки другой версии Python ...
После обычных исправлений синтаксиса 2.x -> 3.x (печать, создание исключения и т. д.) и понимая, что модуль Tkinter
теперь известен как tkinter
в 3.x (нижний регистр), я столкнулся с незнакомыми проблемами с этим фрагментом и несколькими другим нравится:
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)
для перемещения вперед основного цикла, но даже ссылка на него таким образом все равно приводит к той же ошибке.
Приветствуются любые идеи.
ОБНОВЛЕНИЕ: обращение к _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
ссылка на строку, в которой определен метод (первая строка выше).