- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 Python 3.1,并且我想创建一个游戏。我做了一个class Board(Canvas):
为什么?因为我需要通过“标签”来跟踪这些片段。但是,当我尝试将标签绑定(bind)到一 block 时,我得到一个回溯,内容类似于...
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'
我可以沿着代码一直看到错误,但我认为我不理解这里的“_w”是什么。
x = Board()
之后def __init__(self, window=mainWin):
包含self.M = PhotoImage(file=path+'M.gif')
。 self.M
然后进入:
def __draw(self):
canvas = Canvas(mainWin,width=810,height=810)
for i in range(9):
canvas.create_line(90*i,0,90*i,810)
for j in range(9):
canvas.create_line(0,90*j,810,90*j)
canvas.create_rectangle(3,810,810,3)
canvas.bind('<1>', _point2square)
canvas.pack()
self.canM = canvas.create_image(405,405,image=self.M,tag = 'M')
之后,它被用在 self.tag_bind(self.canM, '<1>', _onPieceClick)
中。这就是错误发生的地方。我的问题是为什么?我做了什么以及如何解决它?
我感谢任何形式的帮助!
最佳答案
诸如 Canvas 之类的 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__
):
>>> class Board(tk.Canvas):
... def __init__(self, *args):
... pass
...
>>> board = Board()
>>> board.tag_bind("whatever","<1>", None)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-tk
/Tkinter.py", line 2129, in tag_bind
return self._bind((self._w, 'bind', tagOrId),
AttributeError: Board instance has no attribute '_w'
我的猜测是你正在做这样的事情。您将 Board 定义为 Canvas
的子类,但没有调用 Canvas.__init__
方法(或者正在调用它并忽略它引发的任何错误)
关于python - 导致属性错误: 'classObject' object has no attribute '_w' ?的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5609448/
下面是我的代码,其中我定义了两个类 Node 和 List 来执行您认为它们执行的操作。在扩展列表时,我需要创建一个新的 Node 对象(请参阅代码中带有注释的行)。如果我使用 new Node(da
我原以为计数是 3,但结果是 0。我已经连续编码了 9 个小时,所以也许我已经盯着这个看太久了。 我对 Swift 的理解可能有一个漏洞。任何帮助表示赞赏。 struct Service { en
我正在尝试使用 android native 代码用我的自定义方法替换 android 系统调用,通过谷歌搜索我发现了一些博客,但在尝试给定代码时我遇到了错误。 通过关注博客 我正在使用此 blog
我需要给我的公共(public)成员(member)打电话。采用 1 个参数的构造函数。 这是我的代码的样子://主要 char tmpArray[100] = {}; while ( !inFile
我正在使用 Python 3.1,并且我想创建一个游戏。我做了一个class Board(Canvas):为什么?因为我需要通过“标签”来跟踪这些片段。但是,当我尝试将标签绑定(bind)到一 blo
我想了解 Class.forName("ClassName") 和 ClassObject.getClass返回类的运行时实例。那么为什么在比较从两次获取中获得的结果类对象时我们得到一个 boolea
我有一个 Blazor 项目,在 Startup.cs 中我添加了一个服务 public void ConfigureServices(IServiceCollection servi
我是一名优秀的程序员,十分优秀!