使用Tkinter(Python)构建奥赛罗游戏

使用Tkinter(Python)构建奥赛罗游戏,python,tkinter,reversi,Python,Tkinter,Reversi,如何使用python中的tkinter构建Otherlo GUI?具体来说,我将如何开始使最初的四件作品出现?当我选择一个正方形时,如何让我的电路板打印出一块的位置?到目前为止,当点击一个工件时,它会打印出“[189.01262.0189.0]”。我真的只是想寻求指导,非常感谢您的帮助!这是我到目前为止的代码 import tkinter class RA: def __init__(self): self._columns = 8 self._rows

如何使用python中的tkinter构建Otherlo GUI?具体来说,我将如何开始使最初的四件作品出现?当我选择一个正方形时,如何让我的电路板打印出一块的位置?到目前为止,当点击一个工件时,它会打印出“[189.01262.0189.0]”。我真的只是想寻求指导,非常感谢您的帮助!这是我到目前为止的代码

import tkinter
class RA:
    def __init__(self):
        self._columns = 8
        self._rows = 8
        self._root = tkinter.Tk()
        self._canvas = tkinter.Canvas(master = self._root,
                                      height = 500, width = 500,
                                      background = 'green')
        self._canvas.pack(fill = tkinter.BOTH, expand = True)
        self._canvas.bind('<Configure>',self.draw_handler)


    def run(self):
        self._root.mainloop()

    def draw(self):
        for c in range(self._columns):
            for r in range(self._rows):
                x1 = c * (column_width)
                y1 = r * (row_height)
                x2 = x1 + (column_width)
                y2 = y1 + (row_height)

    def clicked(self,event: tkinter.Event):
        x = event.x
        y = event.y
        coordinates = self._canvas.coords("current")
        print(coordinates)

    def draw(self):
        self._canvas.delete(tkinter.ALL)
        column_width = self._canvas.winfo_width()/self._columns
        row_height = self._canvas.winfo_height()/self._rows
        for  x in range(self._columns):
            for y in range(self._rows):
                x1 = x * column_width
                y1 = y * row_height
                x2 = x1 + column_width
                y2 = y1 + row_height
                r = self._canvas.create_rectangle(x1,y1,x2,y2,fill = 'blue')
                self._canvas.tag_bind(r,'<ButtonPress-1>',self.clicked)

                self._canvas.create_rectangle(x1,y1,x2,y2)
        self._canvas.bind('<Configure>',self.draw_handler)


    def draw_handler(self,event):
        self.draw()


r = RA()
r.run()
导入tkinter
RA类:
定义初始化(自):
self.\u列=8
self.\u行=8
self.\u root=tkinter.Tk()
self.\u canvas=tkinter.canvas(master=self.\u root,
高度=500,宽度=500,
背景='绿色')
self.\u canvas.pack(fill=tkinter.BOTH,expand=True)
self.\u canvas.bind(“”,self.draw\u处理程序)
def运行(自):
self.\u root.mainloop()
def牵引(自):
对于范围内的c(自列):
对于范围内的r(自身行):
x1=c*(列宽)
y1=r*(行高)
x2=x1+(列宽)
y2=y1+(行高)
已单击def(自身,事件:tkinter.event):
x=事件.x
y=事件。y
坐标=self.\u canvas.coords(“当前”)
打印(坐标)
def牵引(自):
self.\u canvas.delete(tkinter.ALL)
column\u width=self.\u canvas.winfo\u width()/self.\u columns
row\u height=self.\u canvas.winfo\u height()/self.\u rows
对于范围内的x(自列):
对于范围内的y(自列):
x1=x*列的宽度
y1=y*行高
x2=x1+列宽度
y2=y1+行高
r=self.\u canvas.创建\u矩形(x1,y1,x2,y2,fill='blue')
self.\u canvas.tag\u bind(r',,self.clicked)
自画布。创建矩形(x1、y1、x2、y2)
self.\u canvas.bind(“”,self.draw\u处理程序)
def draw_处理程序(自身、事件):
self.draw()
r=RA()
r、 运行()

使用画布绘制光盘。创建椭圆(bbox,**选项)

使用标签来区分画布项目:

标记是附加到项目的符号名称。标记是普通字符串,它们可以包含除空格以外的任何内容

我建议您标记每个单元格的每个元素(矩形和椭圆形),并使用一个允许您识别它的标记

item = canvas.create_oval(x1, x2, y1, y2, tags=("x=1","y=3"))
单击项目时,您可以使用

canvas.gettags(item)

然后迭代所有标记:如果标记以
“x=“
”y=“
开头,则它包含行/列信息,您可以使用
int(标记名[2:])
使用
画布绘制光盘。创建椭圆(bbox,**选项)

使用标签来区分画布项目:

标记是附加到项目的符号名称。标记是普通字符串,它们可以包含除空格以外的任何内容

我建议您标记每个单元格的每个元素(矩形和椭圆形),并使用一个允许您识别它的标记

item = canvas.create_oval(x1, x2, y1, y2, tags=("x=1","y=3"))
单击项目时,您可以使用

canvas.gettags(item)

然后迭代所有标记:如果标记以
“x=“
”y=“
开头,则它包含行/列信息,您可以使用
int(标记名[2:])
使用
画布绘制光盘。创建椭圆(bbox,**选项)

使用标签来区分画布项目:

标记是附加到项目的符号名称。标记是普通字符串,它们可以包含除空格以外的任何内容

我建议您标记每个单元格的每个元素(矩形和椭圆形),并使用一个允许您识别它的标记

item = canvas.create_oval(x1, x2, y1, y2, tags=("x=1","y=3"))
单击项目时,您可以使用

canvas.gettags(item)

然后迭代所有标记:如果标记以
“x=“
”y=“
开头,则它包含行/列信息,您可以使用
int(标记名[2:])
使用
画布绘制光盘。创建椭圆(bbox,**选项)

使用标签来区分画布项目:

标记是附加到项目的符号名称。标记是普通字符串,它们可以包含除空格以外的任何内容

我建议您标记每个单元格的每个元素(矩形和椭圆形),并使用一个允许您识别它的标记

item = canvas.create_oval(x1, x2, y1, y2, tags=("x=1","y=3"))
单击项目时,您可以使用

canvas.gettags(item)
然后迭代所有标记:如果标记以
“x=“
”y=“
开头,则它包含行/列信息,您可以使用
int(标记名[2:])