tkinter desiste ao portar o código 2.x para 3.x, o atributo do módulo 'tkinter' não existe
Estou portando o código para esta tarefa:http: //www.stanford.edu/class/cs221/progAssignments/PA1/search.htm (todo o código-fonte está disponível como zip a partir daí) do Python 2.x ao 3.x. Observe que portar não é uma tarefa, é apenas eu tentando manter o código atualizado e evitar a instalação de outra versão do Python ...
Após as correções usuais da sintaxe 2.x -> 3.x (impressão, aumento de exceção, etc.) e percebendo que o móduloTkinter
agora é conhecido comotkinter
no 3.x (letras minúsculas), já deparei com problemas mais estranhos, com esse trecho e vários outros como ele:
def keys_pressed(d_o_e=tkinter.tkinter.dooneevent,d_w=tkinter.tkinter.DONT_WAIT)
Os erros são do tipo:
AttributeError: 'module' object has no attribute 'tkinter'
conclusão do código @ no meu IDE e o rastreamento da variável parecem indicar que otkinter
módulo @ não possui atributo ou subclassetkinter
sob o qual se pode se referir adooneevent
ouDONT_WAIT
. No entanto, existem algumas outras referências na Internet de pessoas que usam construções como
_tkinter.dooneevent(_tkinter.DONT_WAIT)
para avançar o loop principal, mas mesmo referenciando-o dessa maneira ainda gera o mesmo err
Todas as idéias muito apreciadas.
UPDATE: Fazer referência à notação _root_window via lambda parece funcionar, pois já não reclama tempo de pré-execução na maioria dos casos. Para meus olhos destreinados, no entanto, isso é basicamente "mágico" e, como tal, tenho pouca idéia do que esse erro subsequente está dizendo ou como contornar esse problema. O método agora se parece com isso, com minhas alterações na primeira linha:
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)
e o erro que recebo é:
TypeError: 'Tk' object is not callable
eferenciando a linha onde o método está definido (primeira linha acima