문제

그래서 나는 2.6에서 Python 3.1.1로 업그레이드했고 Tkinter를 사용하는 오래된 프로그램을 운영했습니다.

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

나는 선을 확신합니다

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])

이전 버전에서는 괜찮 았습니다. 각 좌표를 얻는 방법이 불가능할 수 있도록 무엇이 바뀌 었는지 잘 모르겠습니다.

~로부터 Tkinter Docs (PDF)

".find_enclosed (x1, y1, x2, y2)는 왼쪽 상단 모서리가 (x1, y1)이고 오른쪽 하단이 (x2, y2) 인 사각형 내에서 완전히 발생하는 모든 객체의 객체 ID 목록을 반환합니다.

.find_overlapping (x1, y1, x2, y2)은 이전 방법과 마찬가지로, 주어진 사각형과 적어도 하나의 지점을 공유하는 모든 객체의 객체 ID 목록을 반환합니다. "

이것을 고치는 방법에 대한 아이디어가 있습니까? 더 많은 정보가 필요하면 알려주세요. 내가 가진 Tkinter 버전은 8.5, 나는 유휴 3.1.1과 Python 3.1.1이 있습니다. 내가 제공 한 PDF 링크는 8.4에 대한 것이지만 이러한 기능에 변화가 있다고 상상할 수 없습니다.

감사해요!

도움이 되었습니까?

해결책

self.canvas.coords(name)

반환 a map object, 및 오류가 표시됩니다 map Python 3에서는 객체가 소독 할 수 없습니다. 변경해야합니다. coords 튜플 또는 목록이기도합니다.

코드를 변경해야합니다.

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

다른 팁

Python 2.x에서 Python 3.x로 몇 가지 깨진 변화가있었습니다. map의 기능.

스크립트를 실행 했습니까? 2To3 아직?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top