Когда я передаю код кнопкам и передаю их экземпляр, все работает, как и ожидалось, но я создаю их программно, рельеф = значение, его значение работает хаотично.
from tkinter import *
def eventHandler(event):
wg = event.widget
if str(wg) == '.':
pass
else:
# Get the Widget's Attributes
print('name:', wg, 'state:', wg['state'])
# Set the Widget's Attributes.
wg.configure(state = DISABLED, bg = '#B29700', fg = '#EFCC90',
relief = SUNKEN)
print('name:', wg, '| relief:', wg['relief'],'| state:', wg['state'])
win = Tk()
win.configure(bg = 'black')
win.geometry('200x200+500+50')
lb_Header = Label(win, text = 'Testing', fg = 'red', bg = 'black',
font = ('Arial Bold',20), pady = 5)
lb_Header.pack()
alpha = ['a', 'b']
for n in range(0,2):
btn = Button(win, text = alpha[n], font = ('Arial Bold', 14), bg = 'gold',
fg = 'black', width = 2)
btn.pack()
win.bind("<Button-1>", eventHandler)
win.mainloop()
В этой версии, если дважды щелкнуть одну и ту же кнопку, кнопка в первый раз не выглядит утопленной, хотя и сообщает, что она утоплена. При повторном щелчке он сообщает, что он снова утоплен, и также выглядит так.
Однако, если вы измените этот раздел обработчика:
# Set the Widget's Attributes.
if wg['state'] == 'disabled':
wg.bell()
else:
wg.configure(state = DISABLED, bg = '#B29700', fg = '#EFCC90',
relief = SUNKEN)
print('name:', wg, '| relief:', wg['relief'],'| state:', wg['state'])
, вы заметите, что при нажатии кнопки во второй раз он не только не выглядит затонувшим, но и сообщает об облегчении: поднято.
Поскольку много раз мне приходилось создавать виджеты программно - не только потому, что это удобнее, но и потому, что их количество может отличаться - мне нужно получить доступ к атрибутам виджета через событие. Кто-нибудь знает, почему вышеупомянутый неожиданный результат происходит и как я могу решить это ошибочное поведение c?