AttributeError при попытке изменить цвет метки tkinter с помощью связанной команды - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь создать ярлык tkinter, который меняет цвет при нажатии, чтобы показать, что он был посещен.Я продолжаю получать ошибку атрибута, говоря, что Show_Label не имеет атрибута "fg".Пожалуйста помоги!Вот код, который используется.

class Sheet_Label(Label):
    def __init__(self,master,text):

        Label.__init__(self,master,text=text,cursor="hand2",font="Times 16 underline",fg="blue")
        def button_click(event):
            if self.fg =="blue":
                self.fg = "purple"
            else:
                self.fg = "purple"
            location = os.getcwd()
            file = webbrowser.open_new(location + '\\' + "hello.txt")
        self.bind("<Button-1>",func=button_click)

def sheets_view():
    sheets_window = Toplevel(window)
    hello = modules.Sheet_Label(master=sheets_window,text="Hello")
    hello.pack(padx=10,pady=10)
    sheets_window.title("Production Sheets")
    sheets_window.focus()
    x = (screen_width/2) - (500/2)
    y = (screen_height/2) - (500/2)
    sheets_window.geometry("%dx%d+%d+%d" % (500,500,x,y))
    sheets_window.resizable(0,0)

Вот сообщение об ошибке:

Traceback (most recent call last):
  File "C:\Users\napaf\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 1699, in __call__
    return self.func(*args)
  File "inventory.py", line 311, in sheets_view

    hello = modules.Sheet_Label(master=sheets_window,text="Hello")
  File "C:\Users\napaf\Documents\Programming\adco_project\modules.py", line 24, in __init__
    self.action = action
NameError: name 'action' is not defined
PS C:\Users\napaf\Documents\Programming\adco_project> python inventory.pyException in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\napaf\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 1699, in __call__
    return self.func(*args)
  File "C:\Users\napaf\Documents\Programming\adco_project\modules.py", line 27, in button_click
    if self.fg =="blue":
AttributeError: 'Sheet_Label' object has no attribute 'fg'

1 Ответ

0 голосов
/ 05 декабря 2018

Вы не инициализируете self.fg до тех пор, пока не будет вызван button_click, но в этот момент уже слишком поздно, потому что вы пытаетесь сослаться на self.fg до его установки.

Кроме того, self.fg не совпадает с атрибутом fg при создании виджета (например: Label(..., fg="blue"). Если вы хотите получить значение атрибута виджета, вы должны использовать self.cget('fg') или использовать ярлык self['fg']. Если вычтобы установить его из самого класса, вы должны использовать self.configure(fg="purple").

...