質問

だから私は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)

  

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

     

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

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

ありがとう!

役に立ちましたか?

解決

self.canvas.coords(name)

mapオブジェクトを返します。エラー状態では、 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