Невозможно изменить цвет фона tkinter Canvas при наведении курсора мыши?

1

Я хочу изменить цвет фона полного холста всякий раз, когда на него нависает мышь. Имейте этот код для этого. Минимальный пример:

import tkinter as tk

class HoverCanvas(tk.Canvas):
    def __init__(self, master, activebackground, **kw):
        tk.Frame.__init__(self,master=master,**kw)
        self.defaultBackground = self["background"]
        self.activebackground = activebackground
        self.bind("<Enter>", self.on_enter)
        self.bind("<Leave>", self.on_leave)

    def on_enter(self, e):
        self.config(background=self.activebackground)

    def on_leave(self, e):
        self.config(background=self.defaultBackground)



root = tk.Tk()
root.geometry("1280x720")

canvas = HoverCanvas(root, 'red', bg='#212121', width=1280, height=720)
#canvas = tk.Canvas(root, bg='#212121', width=1280, height=720)
canvas.create_text(110, 15, fill="#304ffe", activefill='#6a1b9a', font="Times   14 bold", text="Soccer Data Scraper v1.0")
canvas.grid(row=0, column=0)

root.mainloop()

Цвет холста меняется на красный, если на него наложена мышь, если она пуста (см. Прокомментированную строку). Однако, если я попытаюсь добавить текст или любой другой виджет на холсте, программа перестанет работать и вызовет загадочную ошибку.

Traceback (most recent call last):
  File "canvasbg.py", line 24, in <module>
canvas.create_text(110, 15, fill="#304ffe", activefill='#6a1b9a', font="Times  14 bold", text="Soccer Data Scraper v1.0")
  File "C:\Program Files (x86)\Python37-32\lib\tkinter\__init__.py", line 2501, in create_text
return self._create('text', args, kw)
  File "C:\Program Files (x86)\Python37-32\lib\tkinter\__init__.py", line 2477, in _create
*(args + self._options(cnf, kw))))
_tkinter.TclError: bad option "create": must be cget or configure

Что это за ошибка? Есть ли способ изменить цвет фона холста на наведение курсора, а также наличие в нем других виджетов/текста?

Любая помощь оценивается. Спасибо

Теги:
python-3.x
tkinter
tkinter-canvas

1 ответ

2
Лучший ответ

Ваш класс наследуется от tk.Canvas

class HoverCanvas(tk.Canvas):

но вы вызываете метод __init__ tk.Frame

tk.Frame.__init__(self,master=master,**kw)

tk.Canvas этого вы должны вызвать метод __init__ tk.Canvas.

  • 0
    Привет спасибо! Я чувствую себя так глупо. Спасибо за указание на это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню