什么导致属性错误:“classObject”对象没有属性''u w'?

2024-10-01 13:26:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python3.1,我想创建一个游戏。我做了一个class Board(Canvas):为什么?因为我需要通过“标签”来追踪这些碎片。但是,当我试图将一个标签绑定到一个片段时,我会得到一个类似于。。。在

Traceback (most recent call last):
File "/Users/bluedragon1223/Desktop/Djambi0-2.py", line 282, in <module>
x = Board()
File "/Users/bluedragon1223/Desktop/Djambi0-2.py", line 94, in __init__
self.tag_bind(self.canM, '<1>', _onPieceClick)
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/tkinter/__init__.py",
line 2103, in tag_bind
return self._bind((self._w, 'bind', tagOrId),
AttributeError: 'Board' object has no attribute '_w'

我可以一直跟踪代码直到出现错误,我想我对这里的''u w'缺乏理解。在

x = Board()之后,def __init__(self, window=mainWin):包含{}。self.M然后进入:

^{pr2}$

之后,它被用于self.tag_bind(self.canM, '<1>', _onPieceClick)。这就是错误发生的地方。我的问题是为什么?我做了什么,我怎么解决它?在

我很感激你的帮助!在


Tags: inpyselfboardinitbindtagline
1条回答
网友
1楼 · 发布于 2024-10-01 13:26:42

像画布这样的tkinter对象只是实际tk小部件的代理对象。属性_w包含真实tk小部件的内部名称。例如:

$ python2.5
Python 2.5.4 (r254:67917, Dec 23 2008, 14:57:27) 
[GCC 4.0.1 (Apple Computer, Inc. build 5363)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import Tkinter as tk
>>> root=tk.Tk()
>>> canvas = tk.Canvas(root)
>>>> print canvas._w
.8327736

如果您得到一个类似object has no attribute '_w'的错误,这意味着您以某种方式创建了一个对象的实例,该实例认为它是一个tk小部件(因此具有类似于tag_bind)的方法,但实际上没有与之关联的tk小部件。在

发生这种情况的一种方法是,如果您将tkinter小部件子类化,但不调用父类的__init__方法。例如,这样做会得到一个类似的错误(请注意我是如何不对Canvas类调用__init__):

^{pr2}$

我猜你在做这样的事。您将Board定义为Canvas的子类,但没有调用Canvas.__init__方法(或者调用它而忽略它抛出的任何错误)

相关问题 更多 >