У tkinter проблемы при переносе кода 2.x на 3.x, атрибут модуля 'tkinter' не существует
Я портировал код для этого назначения: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
ссылка на строку, где определен метод (первая строка выше).