Изменить рельеф кнопок при нажатии с помощью tkinter - PullRequest
0 голосов
/ 21 ноября 2018

Я хочу создать кнопки с именами из списка.Когда вы нажимаете на кнопку, ее рельеф должен меняться от канавки до утопленной.Есть одно условие, только одна кнопка может быть потоплена.Таким образом, когда вы нажимаете на кнопку, в то время как другая уже утоплена, утонувшая должна вернуться в паз. Как это выглядит

Я смог воплотить свою идею в жизнь и закодировал все это.Однако мне интересно, может ли быть лучший способ реализовать это.Каково твое мнение?Вот мой код:

import tkinter as tk
from functools import partial

class ButtonSunken:
    def __init__(self):
        self.tags = ('A','B','C','D','E','F')
        self.buttons = []
        self.win = tk.Tk()
        self.create_buttons()
        self.win.mainloop()

    def create_buttons(self):
        for j,i in enumerate(self.tags): 
            self.buttons.append(tk.Button(self.win, text = i))
            self.buttons[-1].grid(column=0, row=j)
            ho_general = partial(self.button_pressed, self.buttons[-1])
            self.buttons[-1].configure(command = ho_general)

    def button_pressed(self, button):
        try: # first time active_button does not exist yet
            self.active_button.configure(relief = 'groove')
        except:
            pass
        button.configure(relief = 'sunken')
        self.active_button = button       

t_object = ButtonSunken()

Большое спасибо за вашу помощь!

1 Ответ

0 голосов
/ 21 ноября 2018

Ваш метод довольно хорош, просто он может быть выполнен без использования каких-либо специальных функций.В моем коде я просто сохраняю индекс текущей активной кнопки и устанавливаю ее рельеф на groove всякий раз, когда нажимается следующая кнопка, рельеф которой, в свою очередь, изменяется на sunken.Посмотрите на код.

import tkinter as tk

class ButtonSunken:
    def __init__(self):
        self.tags = ('A','B','C','D','E','F')
        self.buttons = []
        self.active = None
        self.win = tk.Tk()
        self.create_buttons()
        self.win.mainloop()

    def create_buttons(self):
        for j,i in enumerate(self.tags): 
            self.buttons.append(tk.Button(self.win, text=i, command=lambda x=j: self.button_pressed(x)))
            self.buttons[-1].grid(column=0, row=j)

    def button_pressed(self, idx):
        if self.active is not None:
            self.buttons[self.active].configure(relief='groove')
        self.buttons[idx].configure(relief='sunken')
        self.active = idx      

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