tkinter, печать текста при наведении на объекты OptionMenu

Поэтому мне нужно было менять цвета, а также менять цвета при наведении курсора на объекты меню, созданные с помощью OptionMenu в tkinter.

У меня даже есть печать текста при наведении курсора на кнопку, но когда я выпадаю из меню, оно больше не печатается.

Что я делаю неправильно? Как я могу печатать, когда вы нажимаете, чтобы открыть OptionMenu и перемещаться по выбранным элементам?

from tkinter import *
import tkinter as tk
OZoneIzotopeSemiWhite = "#c0c4ca"
buttonBackground = "#303336"
buttonforeground = "#cdd0d7"
BACKGROUND2 = "#1e1f21"

class DropDownButton():
    def __init__(self, parent, placement, opTions, **kw):
        self.parent = parent
        self.options = opTions

        self.om_variable = tk.StringVar(self.parent)
        self.om_variable.set(self.options[0])
        self.om_variable.trace('w', self.option_select)

        self.om = tk.OptionMenu(self.parent, self.om_variable, *self.options)
        self.om["menu"].config(fg=buttonforeground, bg=buttonBackground, activebackground=OZoneIzotopeSemiWhite, activeforeground=BACKGROUND2, borderwidth = 0)
        self.om.config(fg=buttonforeground, bg=buttonBackground, activebackground=OZoneIzotopeSemiWhite, activeforeground=BACKGROUND2, bd =0)
        self.om.place(x = placement, y = 2)
        self.om.bind("<Enter>", self.on_enter)
        self.om.bind("<Leave>", self.on_leave)

    def on_enter(self, event):
        if self.om == self.options[0]:
            print ("Hello")
        elif self.om_variable.get() == self.options[1]:
            print ("Hello 2!")
        else:
            print("Hell0 3!")

    def on_leave(self, enter):
        print ("leave")

    def option_select(self, *args):
        print (self.om_variable.get())

root = tk.Tk()
DropDownButton(root, 55, ['one', 'two', 'three'])
root.mainloop()

1 ответ

Вы не делаете ничего плохого как такового, но вам может потребоваться изменить то, что вы делаете или ваши ожидания. Когда всплывающее меню появляется при нажатии на виджет меню - как создано кодом меню опции - указатель мыши захватывается всплывающим меню, и это состояние продолжается, пока вы не выполните действие, которое выбирает что-то (или вы нажмете или отпустите за пределы меню, которое отменяется). Ваш стиль, который зависит от состояния menubutton, может заметить это и перейти к чему-то немного неожиданному для вас.

Кстати, если вы открываете меню с помощью привязок клавиш, на самом деле полезен другой вид, так как основное внимание также будет уделено фактическому всплывающему меню.

Другие вопросы по тегам