滚动后如何确定光标在画布上的位置?

Posted

技术标签:

【中文标题】滚动后如何确定光标在画布上的位置?【英文标题】:How to determine the cursor's position on the canvas after scrolling? 【发布时间】:2018-07-06 21:20:20 【问题描述】:

我正在使用画布,我想知道光标的位置,我使用 canvas.bind("<Button-1>", callback) 并在回调中使用 event.xevent.y 但是当我使用Scrollbar 移动画布内的内容时,我的问题就出现了:我希望光标的位置通过Scrollbar 偏移量进行调整。

def callback(event):
    x = event.x
    y = event.y
    #need these x and y to by adjusted with the Scrollbar offset


root = tk.Tk()
yscrollbar = tk.Scrollbar(root)
canvas = tk.Canvas(root, yscrollcommand = yscrollbar 
canvas.pack()
canvas.bind("<Button-1>", callback)
yscrollbar.config(command = canvas.yview)
yscrollbar.pack()

【问题讨论】:

请提供minimal reproducible example。 我不相信上面的代码是完整的,请验证它是。 在文档中就可以了。 canvasx 和 canvasy 方法。 【参考方案1】:

如上所述,您可以使用 canvas.canvasx / canvas.canvasy 方法:

class MyApp:
    def __init__(self, app):
        # Initialize canvas with scrollable region and mouse down binding
        self.canvas = ...     

    #  Exemplaric mouse down method
    def onMouseDown(self, event):
        # Get the position on the scrollable canvas
        xOnCanvas = self.canvas.canvasx(event.x)
        yOnCanvas = self.canvas.canvasy(event.y)

参考答案:How to convert Tkinter canvas coordinate to window?

【讨论】:

【参考方案2】:

在文档中就可以了。 canvasx 和 canvasy 方法。 ——布莱恩·奥克利

【讨论】:

以上是关于滚动后如何确定光标在画布上的位置?的主要内容,如果未能解决你的问题,请参考以下文章

画布旋转后如何检测画布上的点

当光标在右列上方时如何滚动左列?

如何滚动到 UITextView 中的当前光标位置?

uwp - RichEditBox - 滚动至光标位置,解决行数超出后设置颜色滚动条回滚顶部的问题

WPF RichTextBox 如何滚动到光标所在位置滚动条操作

画布无限滚动映射对象位置