根据鼠标点击发生tkinter的位置显示一个点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据鼠标点击发生tkinter的位置显示一个点相关的知识,希望对你有一定的参考价值。

所以基本上我被要求创建一个naughts和十字架游戏界面,但我似乎无法弄清楚如何基于鼠标点击显示一个点。到目前为止,我可以根据moused被点击的位置来检索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()
答案

所以这实际上是相当直接的。我将布置步骤,让你开始第一个盒子,然后其余部分应该很容易。

我从左上角和中间框开始,使用你用来获得每个框的右上角和左下角的线坐标。然后我检查鼠标点击坐标是否位于这些点之间,因此在给定的框内。

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,只需将这些点中的一条线绘制到另一条点,然后绘制另一条垂直于该线的线。这不应该太难。要在中心绘制一个点,只需将其绘制在框的两个定义x坐标的中心点上。

以上是关于根据鼠标点击发生tkinter的位置显示一个点的主要内容,如果未能解决你的问题,请参考以下文章

对tkinter简单封装了窗口拖动和点击获取鼠标位置的方法

PyQt5 - 如何在鼠标点击位置上画一个点?

Python3 tkinter基础 Canvas bind 鼠标左键点击时,在当前位置画椭圆形

Python3 Tkinter基础 Frame bind 绑定鼠标左右键 打印点击的位置 event.x event.x_root

Unity - 在鼠标点击的位置放置对象

Python3 Tkinter基础 Canvas bind 绑定左键 鼠标左键点击时,在当前位置画出一个椭圆形