_tkinter.TclError: неправильный # args: В чем дело? - PullRequest
0 голосов
/ 13 апреля 2011

Все еще пишу игру.Эта ошибка немного отличается, хотя.Я получаю след обратно, как это ...

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",<br> 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"

Я имею в виду, я думал, что код достаточно безвреден.

У меня есть глобальные переменные currentCommand = None и (CurX, CurY) = (0,0) и (ToX, ToY) = (0,0) для начала, если это как-то связано с этим, но главная проблема - мои события.

Их два:

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)`

Идея состояла в том, чтобысохраните тег игровой фигуры в currentCommand, а затем используйте это значение для управления этой конкретной фигурой до тех пор, пока фигура не будет перемещена с такими привязками:

canvas.bind('<1>', _newSpaceChosen)

в def __init__(self, mainWin): class Board(Canvas): каждогоу части есть своя собственная tag_bind(#piece-var, '<1>', _onPieceClick)

Моя гипотеза состоит в том, что currentCommand недостаточно быстро получает значение.Как вы думаете, что вызывает этот след?

1 Ответ

0 голосов
/ 13 апреля 2011

Ваша гипотеза почти наверняка верна. Вы можете легко проверить эту гипотезу, распечатав значение перед вызовом find_withtag.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...