SUNKEN Значение работает беспорядочно, когда установлено через событие - PullRequest
0 голосов
/ 03 февраля 2020

Когда я передаю код кнопкам и передаю их экземпляр, все работает, как и ожидалось, но я создаю их программно, рельеф = значение, его значение работает хаотично.

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?

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