Как сделать холст неподвижным? - PullRequest
0 голосов
/ 04 мая 2019

Я работаю над игрой типа крестики-нолики, и способ, которым она работает, заключается в том, что игрок нажимает на экран, чтобы поместить «х» или «о».Код, который я использую, чтобы определить, где будут размещены «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 голосов
/ 04 мая 2019

Если вы привязываете функцию к холсту, вам следует использовать значения из 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()
...