Pergunta

então eu atualizado para python 3.1.1 de 2,6 e eu corri um velho programa de mina que usa tkinter.

Eu recebo a seguinte mensagem de erro que não me lembro de ficar na versão 2.6.

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python31\lib\tkinter\__init__.py", line 1399, in __call__
    return self.func(*args)
  File "C:\myprog.py", line 77, in <lambda>
    self.canvas.bind("<Button-3>", lambda event: myfunc_sub(event))
  File "C:\myprog.py", line 65, in myfunc_sub
    temp_ids = self.canvas.find_overlapping(self.canvas.coords(name)[0], self.canvas.coords(name)[1], self.canvas.coords(name)[2],self.canvas.coords(name)[3])
TypeError: 'map' object is not subscriptable

Eu tenho certeza que a linha

temp_ids = self.canvas.find_overlapping(self.canvas.coords(name)[0], self.canvas.coords(name)[1], self.canvas.coords(name)[2],self.canvas.coords(name)[3])

foi ok na versão mais antiga. Eu não tenho certeza o que mudou para que a maneira que eu obter cada coordenada não é possível.

tkinter docs (pdf)

". Find_enclosed (x1, y1, x2, y2) Retorna uma lista dos IDs de objeto de todos os objetos que ocorrem completamente dentro do retângulo cuja parte superior esquerda canto é (x1, y1) e canto inferior direito é (x2, y2).

.find_overlapping (x1, y1, x2, y2) Como o método anterior, mas retorna uma lista de IDs de objetos de todos os objetos que compartilham pelo menos um ponto com o retângulo dado. "

Algumas ideias sobre como consertar isso? por favor deixe-me saber se você precisar de mais informações. a versão tkinter eu tenho é de 8,5, tenho ocioso 3.1.1 e 3.1.1 python. eu sei o link pdf i fornecido é para 8,4, mas eu não posso imaginar que houve uma mudança nessas funções.

Obrigado!

Foi útil?

Solução

self.canvas.coords(name)

retornar um map object, e como o objeto estados de erro map é unsubscriptable em python 3. Você precisa mudar coords ser uma tupla ou uma lista.

você precisa alterar seu código a ser:

temp_ids = self.canvas.find_overlapping(*tuple(self.canvas.coords(name)))

Outras dicas

Houve várias alterações significativas de Python 2.x para o Python 3.x -. Entre eles, a funcionalidade do map

Você executar o script através 2to3 ainda?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top