_tkinter.TclError: wrong # args : What's the matter?
Still writing a game. This error's a little different, though. I get a trace back like this...
开发者_高级运维Exception in Tkinter callback
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/tkinter/__init__.py",
line 1399, in __call__
return self.func(*args)
File "/Users/bluedragon1223/Desktop/Djambi0-2.py", line 68, in _newSpaceChosen
pieceID = event.widget.find_withtag(currentCommand)
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/tkinte/__init__.py",
line2199, in find_withtag
return self.find('withtag', tagOrId)
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/tkinter/__init__.py",
line 2173, in find
self.tk.call((self._w, 'find') + args)) or ()
_tkinter.TclError: wrong # args: should be ".23215664 find withtag tagOrId"
I mean, I thought the code innocuous enough.
I have global variables currentCommand = None
and (CurX, CurY) = (0,0)
and (ToX, ToY) = (0,0)
to start with, if that has something to do with it, but the main problem is my events.
There are two:
def _newSpaceChosen(event):
print(event.widget.find_withtag('rN')) #Used to check if I had used find_withtag correctly
pieceID = event.widget.find_withtag(currentCommand) #This is the problem source
[CurX, CurY] = event.widget.coords(pieceID[1])
print(CurX, CurY)
[MetaToX, MetaToY] = _point2square(event.x, event.y)
print(event.x, event.y)
print(MetaToX, MetaToY)
[ToX, ToY] = _square2point(MetaToX, MetaToY)
print(ToX, ToY)
event.widget.move(pieceID, ToX - CurX, ToY - CurY)
def _onPieceClick(event):
stuffTags = event.widget.gettags(event.widget.find_closest(event.x, event.y))
try:
event.widget.delete(event.widget.find_withtag('bbox'))
except:
pass
bboxULX = (event.x // 90 + 1) * 90
bboxULY = (event.y // 90 + 1) * 90
bboxLRX = (event.x // 90 + 1) * 90 - 90
bboxLRY = (event.y // 90 + 1) * 90 - 90
event.widget.create_rectangle(bboxULX,bboxULY,bboxLRX,bboxLRY, width=3,
outline='yellow',tag='bbox')
currentCommand = stuffTags[0]
print(currentCommand)`
The idea was to store the game piece tag in currentCommand
, and then use that value to control that specific piece until the piece was moved with bindings like this:
canvas.bind('<1>', _newSpaceChosen)
in the def __init__(self, mainWin):
of a class Board(Canvas):
Each piece has it's own tag_bind(#piece-var, '<1>', _onPieceClick)
My hypothesis is that currentCommand
is not receiving a value soon enough.
What do you guys think causes this trace?
Your hypothesis is almost certainly correct. You can easily test this hypothesis by printing out the value before calling find_withtag
.
精彩评论