Одна кнопка нескольких событий в зависимости от других кнопок фона tkinter - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть кнопка (B), функциональность которой зависит от нажатия других кнопок.Допустим, у меня есть 3 надежные кнопки (b1, b2, b3), фон меняется при нажатии на него.Я использовал следующую команду для 3 кнопок, чтобы изменить цвет фона.

B = Button(frame, image=logo, command=data)
b1 = Button(frame, text = "v", command=lambda:b1.config(bg="gray))
b2 = Button(frame, text = "v", command=lambda:b2.config(bg="gray))
b3 = Button(frame, text = "v", command=lambda:b3.config(bg="gray))

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

Я пытался сделать это следующим образом, но это не сработало так, как я хочу:

def data():
    if b1.configure(bg="gray):
       data1()
    if b2.configure(bg="gray):
       data2()
    if b3.configure(bg="gray):
       data3()
    else:
        print('no data')

def data1():
    as per my requirement 
def data2():
    as per my requirement 
def data3():
     as per my requirement 

Но я не получаю данных,несмотря на нажатие кнопок.

Рад услышать некоторые предложения.

1 Ответ

0 голосов
/ 19 февраля 2019

Чтобы получить поведение, которое вы ищете, вам нужно изменить метод command для каждой кнопки.Вы можете определить отдельные обработчики для каждой кнопки следующим образом:

b1 = Button(frame, text = "v", command=b1_pressed)
b2 = Button(frame, text = "v", command=b2_pressed)
b3 = Button(frame, text = "v", command=b3_pressed)

def b1_pressed():
    b1.config(bg="gray")
    b2.config(bg="red")  # Or any other color.
    b3.config(bg="red")

def b2_pressed():
    b1.config(bg="red")
    b2.config(bg="gray")
    b3.config(bg="red")

def b3_pressed():
    b1.config(bg="red")
    b2.config(bg="red")
    b3.config(bg="gray")

Это многократное повторение, поэтому вместо этого вы можете передать информацию о нажатой кнопке обработчику.

b1 = Button(frame, text = "v", command=lambda: button_pressed(b1))
b2 = Button(frame, text = "v", command=lambda: button_pressed(b2))
b3 = Button(frame, text = "v", command=lambda: button_pressed(b3))

def button_pressed(button):
    for b in [b1, b2, b3]:
        if b is button:
            b.config(bg="gray")
        else:
            b.config(bg="red")

Нам нужно lambda, чтобы заключить вызов в button_pressed, чтобы мы могли передать значение (как вы сейчас делаете для config в вашем примере).Функция target берет ссылку на эту кнопку и сравнивает ее с каждым членом списка возможных кнопок.Если это соответствует, мы устанавливаем эту кнопку на серый, если это не так, мы устанавливаем ее на красный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...