سؤال

وحتى أنا ورفع مستواها إلى الثعبان 3.1.1 من 2.6 وركضت برنامج قديم لي والذي يستخدم 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).

     

و.find_overlapping (X1، Y1، X2، Y2)   مثل الطريقة السابقة، ولكن ترجع قائمة معرفات كائن من كافة الكائنات التي تشترك نقطة واحدة على الأقل مع المستطيل معين. "

وأي أفكار حول كيفية إصلاح هذا؟ واسمحوا لي أن أعرف إذا كنت بحاجة إلى مزيد من المعلومات. النسخة tkinter لدي هو 8.5، ولدي 3.1.1 الخمول وبايثون 3.1.1. وأنا أعلم الرابط الشعبي ط المقدمة هو 8.4، ولكن لا أستطيع أن أتصور كان هناك تغيير في هذه الوظائف.

وذلك بفضل!

هل كانت مفيدة؟

المحلول

self.canvas.coords(name)

وإرجاع map object، ووجوه دول الخطأ map هو unsubscriptable في بيثون 3. تحتاج إلى تغيير coords أن تكون الصفوف (tuple) أو قائمة.

وكنت بحاجة إلى تغيير التعليمات البرمجية لتكون:

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

نصائح أخرى

وكانت هناك عدة تغييرات كسر من بيثون 2.X لبيثون 3.X - بينهم، وظائف map ل

هل تشغيل البرنامج النصي من خلال 2to3 حتى الآن؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top