По сути, я хочу вызвать нестатическую и неглобальную функцию через command = *function parameter*
Я хочу создать tkinter.Button
, который меняет свой цвет при нажатии.
Я пытался создать подкласс, чтобы добавить дополнительные атрибуты, которые имеют другие оффтоп преимущества:
import tkinter as tk
class Cell(tk.Button):
def __init__(self, master, coord , command, bg = "ghost white", state = 0):
tk.Button.__init__(self, master, bg = bg, height = height, width = width, relief = relief, bd = bd)
self.coord = coord
self.state = state
def switch(self):
if self.state:
self.state = 0
self.config(bg = "gray1")
else:
self.state = 1
self.config(bg = "ghost white")
Но вкратце я хотел бы сделать что-то вроде этого:
tk.Button(master, command = lambda: self.config(bg = "color"))
Возможно ли это?
EDIT :
Дальнейший контекст, потому что я думаю, что мое объяснение не совсем поняло сообщение за границей. И еще сообщения об ошибках:
Моя основная концепция: Мне нужна прямоугольная сетка, в которой вы можете щелкнуть ячейку, и ячейка изменит цвет с белого на черный или наоборот.
Поскольку у меня не было никакой другой идеи (не очень знакомой с Tkinter), я использовал кнопки, но если у кого-то есть идея получше, мне было бы очень интересно
Проблемы:
Если я попытаюсь использовать self.
, я получу
NameError: имя 'self' не определено
в заголовке функции - без ее вызова. Так что это не сработает.
Я мог бы просто сделать
cell = tk.Button (master, command = cell.switch)
Но у меня очень много кнопок, и я храню их в массиве
board = []
for i in range(x):
row = []
for j in range(y):
# Button or selfmade Cell class - no difference
cell = tk.Button(master, command = 'needed')
row.append(cell)
board.append(row)
моя установка
Я попробовал следующие варианты:
command = board[x][y].switch
поднимает Ошибка индекса . Предположительно, потому что индекс не существует на момент объявления
- с
lambda: board[x][y].switch
: я не получаю ошибку, но ничего не происходит при нажатии
- с
lambda: board[x][y].switch()
: я не получаю ошибку, но он вызывает переключение только на последнюю ячейку, добавленную в массив
command = lambda: board[x][y].config(bg = "grey1")
- работает нормально, но каждая кнопка меняет только цвет последней кнопки, добавленной в board