0

そのため、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 ドキュメントから(pdf)

".find_enclosed ( x1, y1, x2, y2 ) 左上隅が (x1, y1) で右下隅が (x2, y2) の長方形内に完全に含まれるすべてのオブジェクトのオブジェクト ID のリストを返します。

.find_overlapping ( x1, y1, x2, y2 ) 前のメソッドと同様ですが、指定された長方形と少なくとも 1 つのポイントを共有するすべてのオブジェクトのオブジェクト ID のリストを返します。"

これを修正する方法についてのアイデアはありますか?さらに情報が必要な場合はお知らせください。私が持っている tkinter のバージョンは 8.5 で、アイドル状態の 3.1.1 と python 3.1.1 があります。私が提供したpdfリンクが8.4用であることは知っていますが、これらの機能に変更があったとは想像できません。

ありがとう!

4

2 に答える 2

3

Python 2.X から Python 3.X へのいくつかの重大な変更がありました。その中には、mapの機能があります。

スクリプトを2to3で実行しましたか?

于 2009-09-10T16:38:37.190 に答える
2
self.canvas.coords(name)

を返しmap objectます。エラーが示すように、Python 3 では object is unsubscriptable です。タプルまたはリストmapに変更する必要があります。coords

コードを次のように変更する必要があります。

temp_ids = self.canvas.find_overlapping(*tuple(self.canvas.coords(name)))
于 2009-09-10T16:40:02.680 に答える