Проблемы с tkinter при переносе кода 2.x на 3.x, атрибут модуля tkinter не работает. t exist

ОБНОВЛЕНО: СМ. НИЖЕ

Я переносил код для этого назначения: 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              

ссылка на строку, в которой определен метод (первая строка выше).

5
задан Mikael 10 October 2011 в 18:12
поделиться