tkinter, печать текста при наведении на объекты OptionMenu - PullRequest
0 голосов
/ 14 декабря 2018

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

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

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

enter image description here

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 Ответ

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

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

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

...