滚动后如何确定光标在画布上的位置?
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.x
和 event.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 方法。 ——布莱恩·奥克利
【讨论】:
以上是关于滚动后如何确定光标在画布上的位置?的主要内容,如果未能解决你的问题,请参考以下文章
uwp - RichEditBox - 滚动至光标位置,解决行数超出后设置颜色滚动条回滚顶部的问题