Как получить идентификатор элемента холста? - PullRequest
2 голосов
/ 03 ноября 2019

Если я сохраню элемент canvas в переменной, я ожидаю, что он будет сохранен как объект tkinter.rectangle, который я смогу использовать позже.

rec = can.create_rectangle(l, fill="blue")

Но вместо этого сохраняется как целое число << class 'int' >>

from tkinter import Tk, Canvas, Button

def press(canv, rect):
    print("pressed")
    canv.move(rect, 10)

l = [50,100,100,200]

root = Tk()
can = Canvas(root)
can.pack()
rec = can.create_rectangle(l, fill="blue")
print("rec",rec)    #1
print("type(rec) ", type(rec)) #<class 'int'>
b = Button(root, text="NOTHING", command=lambda:press(can, rec))
b.pack()
print("type(b) = ",type(b)) #<class 'tkinter.Button'>
print("b = ",b) #TCL id like .41549040
root.mainloop()

При запуске этого кода возвращается ошибка:

_tkinter.TclError: wrong # args: should be ".21823184 move tagOrId xAmount yAmount"

Почему он имеет тип integer и как получить идентификатор элемента canvas, чтобы переместить его позже?

Ответы [ 2 ]

0 голосов
/ 12 ноября 2019

Решение простое: вы не предоставляете значение Y для работы. Функция хочет:

canv.move(item, x, y)

Если вам нужно переместить ее только по оси x, вы должны написать следующую строку:

canv.move(rect, 10, 0)
0 голосов
/ 03 ноября 2019

Если я сохраню элемент canvas в переменной, я ожидаю, что он будет сохранен как объект tkinter.rectangle

Это ложное ожидание. Документированное поведение таково, что он возвращает целочисленный идентификатор.

Почему он имеет тип integer и как получить идентификатор элемента canvas, чтобы переместить его позже?

Нет другого идентификатора, кроме целого числа, возвращаемого методом create_rectangle. Вы можете использовать этот идентификатор для перемещения предмета.

При запуске этого кода возвращается сообщение об ошибке: _tkinter.TclError: wrong # args: should be ".21823184 move tagOrId xAmount yAmount"

Это сообщение об ошибке сообщает вам, что именно не так: wrong # args. Вы должны предоставить идентификатор, а также xAmount и yAmount. Вы только даете id и xAmount.

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