отображать точку в зависимости от того, где произошел щелчок мышью tkinter - PullRequest
0 голосов
/ 05 октября 2018

Так что, в основном, меня попросили создать игровой интерфейс для пересечений, но я не могу понять, как отобразить точку, основываясь на щелчке мыши.Пока что я могу получить координаты x и y в зависимости от того, где была нажата мышка, но не могу отобразить точку в этой позиции.Мой код выглядит следующим образом, заранее спасибо:

from tkinter import *

class Window(Tk):
    def __init__(self):
         Tk.__init__(self)

         self.mygui()



def mygui(self):
    self.title('Naughts and Crosses')
    self.geometry('600x400+700+300')

    self.bind('<Button-1>', self.get_location)

    #creating a naughts and crosses board

    canvas = Canvas(self, width=1000, height=1000)

    canvas.create_line(100, 140, 500, 140)
    canvas.create_line(100, 250,500, 250)

    canvas.create_line(220, 50, 220, 350)
    canvas.create_line(370, 50, 370, 350)

    canvas.pack()

def get_location(self, eventorigin):
    x = eventorigin.x
    y = eventorigin.y
    # x and y will return three figure coordinates, this is where i am 
    stuck.

Window().mainloop()

1 Ответ

0 голосов
/ 05 октября 2018

Так что это на самом деле довольно просто.Я планирую шаги для начала работы с первым блоком, а затем все будет легко.

Я начал с верхнего левого и среднего блоков и использовал координаты линии, которые вы использовали для полученияверхняя правая и нижняя левая точки каждой коробки.Затем я проверяю, лежат ли координаты щелчка мышью между этими точками и, следовательно, находятся в заданном поле.

from tkinter import *

class Window(Tk):
    def __init__(self):
         Tk.__init__(self)

         self.mygui()

         # Define the bounds of each box based on the lines drawn in mygui
         self.topleft = [(100,220), (50, 140)]
         self.topmiddle = [(220, 370), (50, 140)]

    def mygui(self):
        self.title('Naughts and Crosses')
        self.geometry('600x400+700+300')

        self.bind('<Button-1>', self.get_location)

        #creating a naughts and crosses board

        canvas = Canvas(self, width=1000, height=1000)

        canvas.create_line(100, 140, 500, 140)
        canvas.create_line(100, 250,500, 250)

        canvas.create_line(220, 50, 220, 350)
        canvas.create_line(370, 50, 370, 350)

        canvas.pack()

    def get_location(self, eventorigin):
        x = eventorigin.x
        y = eventorigin.y
        # x and y will return three figure coordinates, this is where i am stuck.

        print(x, y)
        print(self.topleft)
        print(self.topmiddle)

        # Check if the mouse click is in the top left box
        if(x > self.topleft[0][0] and x < self.topleft[0][1]):
          if(y > self.topleft[1][0] and y < self.topleft[1][1]):
              print("In top left")
        # Check if the mouse click is in the top middle box
        if(x > self.topmiddle[0][0] and x < self.topmiddle[0][1]):
          if(y > self.topmiddle[1][0] and y < self.topmiddle[1][1]):
              print("In top middle")


Window().mainloop()

Есть много других способов сделать это, но этого должно быть достаточно, чтобы начать работу.

Как вы можете видеть в моем примере, у каждой коробки есть две определяющие точки.Чтобы нарисовать х в этом поле, просто нарисуйте одну из линий от одной из этих точек к другой, а затем нарисуйте другую линию перпендикулярно этому.Это не должно быть слишком сложно.Чтобы нарисовать точку в центре, просто нарисуйте ее в центральной точке двух определяющих x координат блока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...