首页 > 解决方案 > 使用 tkinter 单击更改按钮浮雕

问题描述

我想从列表中创建标有名称的按钮。当您单击按钮时,其浮雕将从凹槽变为凹陷。有一个条件,只允许下沉一个按钮。因此,当您单击一个按钮而另一个按钮已经下沉时,下沉的按钮必须回到凹槽。 它看起来如何

我能够将我的想法付诸实践,并对整个事情进行编码。但是,我想知道是否有更好的方法来实现它。你有什么意见?这是我的代码:

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()

非常感谢您的帮助!

标签: pythonbuttontkinter

解决方案


您的方法非常好,只是它可以在不使用任何特殊功能的情况下完成。在我的代码中,我只存储当前活动按钮的索引,并在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()

推荐阅读