【问题标题】:How to convert Tkinter canvas coordinate to window?如何将 Tkinter 画布坐标转换为窗口?
【发布时间】:2011-12-10 07:24:09
【问题描述】:

有没有办法在 Tkinter 中将画布坐标转换为窗口坐标?

这与将窗口坐标转换为画布坐标相反,它是这样完成的:

x = canvas.canvasx(event.x)

【问题讨论】:

    标签: python tkinter coordinate-systems tkinter-canvas


    【解决方案1】:

    使用canvasx 和canvasy 方法,参数为零,计算可见画布左上角的x/y。然后只需使用数学将画布坐标转换为相对于窗口的坐标。

    # upper left corner of the visible region
    x0 = self.canvas.canvasx(0)
    y0 = self.canvas.canvasy(0)
    
    # given a canvas coordinate cx/cy, convert it to window coordinates:
    wx0 = cx-x0
    wy0 = cy-y0
    

    例如,如果画布一直滚动到顶部和左侧,x0 和 y0 将为零。您提供的任何画布坐标都将与窗口坐标相同(即:0,0 的画布 x/y 将对应于窗口坐标 0,0)。

    如果您向下和向右滚动了 100 个像素,则 100,100 的画布坐标将转换为 0,0 的窗口坐标,因为该像素位于窗口的左上角。

    这会为您提供一个相对于画布左上角的值。如果你需要这个相对于整个窗口的左上角,使用winfo_x 和winfo_y 来获取画布相对于窗口的坐标并做更多的数学运算。或者,使用winfo_rootx 和winfo_rooty 获取小部件相对于屏幕的坐标。

    【讨论】:

    • 不知道是我没看懂答案还是没说清楚。我想要一种方法来知道画布内某些东西的坐标(例如,画布图像项),但是以窗口坐标的形式,因为我的画布是可滚动的。
    • @Marcos:我的错。我没有完全理解你在问什么,就匆匆回答了。希望我现在已经给出了更好的答案。
    猜你喜欢
    • 2011-10-15
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 2013-06-05
    • 1970-01-01
    相关资源
    最近更新 更多