title: Tkinter: Identifying button by row and column
body: <p>I want to be able to select a button based on what row and column it is in on a grid and the button and control its Text and Relief. I haven't been able to find anything on widgets or cells used in this manner.
  Edit:
  I changed where root is placed and now it says that I can't use a tuple that I recieved for 'relief' which makes sense, I need to access the widget itself. Any reccomendations</p>
  
  <pre><code>import tkinter
  import functools
  import random
  from time import sleep
  width = input('Enter the grid width. ')
  height = input('Enter the grid height. ')
  numb = input('Enter the number of bombs. ')
  Matrix = [[0 for lp in range(int(width))] for fg in range(int(height))]
  def ranintx():
      return  random.randint(0,int(width))
  def raninty():
      return random.randint(0,int(height))
  
  def placemines():
     y = ranintx()
     x = raninty()
     for ranintformine in range(int(numb)):
         x = ranintx()
         y = raninty()
         Matrix[y-1][x-1] = 1
  placemines()
  def sunken(event, self, x, y):
      button = event.widget
      button['relief'] = 'sunken'
      if x - 1 &lt; 0 :
          return
      if x &gt; int(width) + 1 :
          return
      if y - 1 &lt; 0 :
          return
      if y &gt; int(height) + 1 :
          return
      if Matrix[x][y] == 1 :
          top = tkinter.Toplevel()
          top.title("About this application...")
  
          msg = tkinter.Message(top, text="You Lose")
          msg.pack()
  
          button = tkinter.Button(top, text="Dismiss", command=top.destroy)
          button.pack()
          print('Column = {}\nRow = {}'.format(x, y))
      else:
         n1 = x - 1
         n2 = y - 1
  
         for lp in range(3):
              for lp2 in range(3):
                  abutton = root.grid_location(n1, n2)
                  abutton['relief'] = ['sunken']
                  # I want to be able to change and select the button here. This was one of my poor attempt 
                  n2 =+ 1
              n1 =+ 1
  def push(event, self, x, y):
      button = event.widget
      if Matrix[x][y] == 1 :
           print('Column = {}\nRow = {}'.format(x, y))
   class MineSweep(tkinter.Frame):
  
          @classmethod
          def main(cls, width, height):
          window = cls(root, width, height)
          '''placemine()'''
          root.mainloop()
  
      def __init__(self, master, width, height):
          super().__init__(master)
          self.__width = width
          self.__height = height
          self.__build_buttons()
          self.grid()
      #def sunken(event):
      #    button = event.widget
      #    button['relief'] = 'sunken'
      def __build_buttons(self):
          self.__buttons = []
          for y in range(self.__height):
              row = []
              for x in range(self.__width):
                  button = tkinter.Button(self, state='disabled')
                  button.grid(column=x, row=y)
                  button['text'] = ' '
                  print(grid.slaves)
                  self.checked = True
                  #button['command'] = functools.partial(self.__push, x, y)
                  button.bind("&lt;Button-3&gt;",
                      lambda event, arg=x, brg=y: push(event, self, arg, brg))
                  button['relief'] = 'raised'
                  button.bind("&lt;Button-1&gt;",
                      lambda event, arg=x, brg=y: sunken(event, self, arg, brg))
  
  
                  #button['command'] = sunken
                  row.append(button)
               self.__buttons.append(row)
  
  
  
  root = tkinter.Tk()
  if __name__ == '__main__':
      MineSweep.main(int(width), int(height))
  </code></pre>