python - 使用 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()
非常感谢您的帮助!
解决方案
您的方法非常好,只是它可以在不使用任何特殊功能的情况下完成。在我的代码中,我只存储当前活动按钮的索引,并在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()
推荐阅读
- python - TypeError: unhashable type: 'list' 如何从数据列表中获取出现
- reactjs - 为什么只有一个反应本机并行动画在运行而不是另一个?
- php - 在 laravel 中显示数据库中的一张图像
- flutter - 在 Flutter 中渲染 Markdown,用户可以长按并执行自定义操作
- vba - 访问 VBA - 使用 VBA 的 SQL 语句使用文本框组合框值在表单上填充列表框 OR
- ios - 当精灵在视口之外时如何删除它们,但是如果我返回它们的位置以节省内存,然后再次添加它们
- r - R 问题:如何模拟此图以显示健康和疾病中细胞的百分比变化?
- javascript - 如何更改 Highcharts 中非活动条的颜色?
- python - 将哨兵从 9.1 升级到 10 的问题
- excel - 使用 VBA 更改 Internet Explorer 编码