Перетаскивание холста Tkinter от центра

Есть ли способ узнать, сколько пикселей полоса прокрутки прокручивает холст в Tkinter? Я пишу приложение, которое перетаскивает строки. Однако всякий раз, когда я пытаюсь перетащить линию, после того, как я прокрутил некоторое количество строк, линия автоматически центрируется на позиции, где был конец строки до прокрутки. Моя идея состоит в том, чтобы сместить координаты на ту же величину, чтобы линия оставалась точно под значком мыши при перетаскивании.

#output is the canvas
#wires is a list containing the item ID's of all the lines in my project
def moveLine(e):
    outputItem = output.find_withtag('current')
    try:
        x0, y0, x1, y1 = output.coords(outputItem)
    except:
        pass

    if len(output.coords(outputItem)) != 0 and outputItem[0] in wires:
        output.coords(outputItem, x0, y0, e.x, e.y)
        output.itemconfig(outputItem, fill='blue')

person Pascal Sossou    schedule 03.08.2020    source источник
comment
Это поможет ответить на ваш вопрос? stackoverflow.com/a/7811911/7432   -  person Bryan Oakley    schedule 04.08.2020
comment
Измените output.coords(outputItem, x0, y0, e.x, e.y) на output.coords(outputItem, x0, y0, output.canvasx(e.x), output.canvasy(e.y)).   -  person acw1668    schedule 04.08.2020


Ответы (1)


Есть два способа решить эту проблему. Вы можете использовать полосу прокрутки виджета tkinter, но этот движущийся значок будет отложен. И второй способ - создать свою собственную полосу прокрутки (по событию щелчка, событию движения для ползунка и не забудьте заблокировать ось Y) и по этому событию перетащить значок и ползунок в одну и ту же функцию. Будет ровнее. Если хотите, я могу отправить вам свой код для пользовательской полосы прокрутки.

person qa74ws85    schedule 03.08.2020
comment
Ни один из них не является хорошим способом решить эту проблему. Кроме того, в этом ответе недостаточно подробностей, чтобы кто-то мог реализовать предложения. - person Bryan Oakley; 04.08.2020