0

所以我必须更改颜色以及更改颜色,同时将鼠标悬停在使用 tkinter 中的 OptionMenu 创建的菜单对象上。

当我将鼠标悬停在按钮上时,我什至可以打印文本,但是当我下拉菜单时,它不会再打印了。

我究竟做错了什么?当您单击以打开 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()
4

1 回答 1

0

你没有做错任何事情,但你可能需要改变你所做的事情或你的期望。当通过单击 menubutton 小部件(由选项菜单代码创建)弹出菜单时,鼠标指针被弹出的菜单抓住,并且这种状态一直持续到您执行选择某项的操作(或单击或在菜单外释放,这将取消)。您的样式(取决于菜单按钮的状态)可能会注意到这一点,并会进入一些您意想不到的地方。

顺便说一句,如果您使用键绑定弹出菜单,则不同的外观实际上很有用,因为焦点也将位于实际的弹出菜单上。

于 2018-12-23T18:19:06.157 回答