如何使画布无法移动?

时间:2019-05-04 15:30:29

标签: python tkinter tkinter-canvas

我正在玩井字游戏,其工作方式是玩家将在屏幕上单击以放置“ x”或“ o”。我用来确定将“ x”或“ o”放置在何处的代码如下:

mxpos = root.winfo_pointerx()
mypos = root.winfo_pointery()
zone = None
if mxpos > -1 and mxpos < 200:
    if mypos > -1 and mypos < 200:
        zone = 1
    if mypos > 199 and mypos < 400:
        zone = 2
    if mypos > 399 and mypos < 600:
        zone = 3
if mxpos > 199 and mxpos < 400:
    if mypos > -1 and mypos < 200:
        zone = 4
    if mypos > 199 and mypos < 400:
        zone = 5
    if mypos > 399 and mypos < 600:
        zone = 6
if mxpos > 399 and mxpos < 600:
    if mypos > -1 and mypos < 200:
        zone = 7
    if mypos > 199 and mypos < 400:
        zone = 8
    if mypos > 399 and mypos < 600:
        zone = 9

但这仅在画布未移动的情况下有效,因为鼠标单击的坐标与那时不同。我已经查了几次了,似乎没有办法做到这一点,只是问是否有人有办法解决这个问题。

1 个答案:

答案 0 :(得分:0)

如果将函数绑定到画布,则应该使用event中的值,然后可以移动窗口或画布,并且应该始终获得相同的值。

import tkinter as tk

def position(event):
    print('desktop:', root.winfo_pointerx(), root.winfo_pointery())
    print('canvas:', event.x, event.y)

root = tk.Tk()

canvas = tk.Canvas(root, width=500, height=500)
canvas.pack()
canvas.bind('<Button-1>', position)

root.mainloop()