Как получить информацию о сетке от нажатой кнопки в tkinter?

Мне нужно создать таблицу кнопок с помощью Tkinter в Python 2.7, которая имеет n строк и n столбцов и не имеет кнопки в нижнем правом углу.

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

  • mechanize python нажмите кнопку
  • PyQt4 - Перетаскивание
  • Изображение на кнопке
  • Как выбрать каталог и сохранить местоположение с помощью tkinter в Python
  • Как создать кнопку на холсте tkinter?
  • Кнопка Tkinter не отображается в TopLevel?
  • Это мой текущий код:

     from Tkinter import * #Input: n=int(raw_input("Input whole positive number: ")) L = range(1,n+1) k = n m = n #Program: root = Tk() for i in L: for j in L: frame = Frame(root) frame.grid(row = i, column = j) if j == k and i == m: pass else: button = Button(frame) button.grid(row = i, column = j) root.mainloop() 

    Это было бы что-то вроде этого, где я хотел получить положение сетки кнопок и использовать его для изменения переменных k и m чтобы сделать пустое место в том месте, где была нажата кнопка.

  • Доля моделей sqlalchemy между флягой и другими приложениями
  • Вызов запроса из базы данных Access: «невозможно преобразовать строку в float: E + 6»
  • Обрезать пробелы с помощью PIL
  • Не удается импортировать Scikit-Learn
  • Создание графиков зависимостей в Python
  • Могу ли я отсортировать текст по его числовому значению в Python?
  • 3 Solutions collect form web for “Как получить информацию о сетке от нажатой кнопки в tkinter?”

    Вы можете передать строку и столбец с помощью выражения лямбда для кнопки:

     button = Button(..., command=lambda row=i, column=j: doSomething(row, column)) 

    Не могли бы вы сделать что-то вроде создания сетки кнопок спереди, но включить скрытую кнопку в пустое пространство? Затем, когда нажата кнопка, нажмите кнопку «Скрыть» и отобразите скрытую. Тогда вам не нужно беспокоиться о перемещении кнопок вокруг, если вам не нужен фактический объект кнопки для перемещения по какой-то причине.

    Изменить для улучшения ответа от комментариев:

    Ниже приведен простой пример скрытия кнопки, и она также показывает, как отслеживать кнопки, если только я не привожу ее к редактору. Это можно перевести в список или словарь кнопок или любой другой необходимости. Вам также нужно будет найти способ зарегистрировать локальные кнопки или добавить контекст, чтобы узнать, какой из них показывать или скрывать.

     from Tkinter import Button, Frame, Tk class myButton(Button): def __init__(self, *args, **kwargs): Button.__init__(self, *args, command=self.hideShowButton, ** kwargs) self.visible = True def hideShowButton(self): self.visible = False self.pack_forget() window = Tk() frame = Frame(window) frame.pack() b1 = myButton(window, text="b1") b1.pack() b2 = myButton(window, text="b2") b2.pack() b3 = myButton(window, text="b3") b3.pack() window.wait_window(window) print "At the end of the run b1 was %s, b2 was %s, b3 was %s" % (str(b1.visible), str(b2.visible), str(b3.visible)) 

    Так я пытался это сделать, и проблема в том, что я до сих пор не знаю, как получить строку и столбец нажатой кнопки …

     from Tkinter import * #Input: n = int(raw_input("Input whole positive number: ")) L = range(1,n+1) k = n m = n #Try putting values for k and m which are less then n and you will see what i need to get #Moving: def Move(): #This i cant fill return k,m #Program: root = Tk() for i in L: for j in L: frame = Frame(root) frame.grid(row = i,column = j) if i == int(k) and j == int(m): pass else: button = Button(frame, command = lambda: Move()) button.pack() root.mainloop() 

    Таким образом, изменяя значения k и m пробел создается на другом месте …

    Python - лучший язык программирования в мире.