将悬停选项添加到类中的按钮

时间:2016-01-08 18:10:20

标签: python tkinter

我正在尝试为我已经实现的多个按钮添加一个悬停选项,但我想在课堂上这样做以节省我单独为每个按钮添加选项。 我在python中编码并使用tkinter作为我的GUI。

class GUIButtons():
    def __init__(self, window):
         self.window = window

         self.Calculate = Button(window, command=GetUnits, text="Calculate", width = 19, background = "dark blue", fg="white")
         self.Calculate.grid(row=1, column=4, sticky=NSEW)

         self.ShowMethod = Button(window, command=ShowMethod, text="Show method", width = 19, background = "darkblue", fg="white")
         self.ShowMethod.grid(row=1, column= 5, sticky=NSEW)

         self.Submit = Button(window, command = lambda: GetCoordinate(Message), text="Submit", width = 6, height = 1, background = "dark blue", fg="white", font = 11)
         self.Submit.grid(row=3, column = 3, sticky = NSEW)

         self.Displacement = Button(window, text="Displacement", background = "Dark Blue", fg="white", font=11)
         self.Displacement.grid(row=2, column=1, sticky= N)

不确定如何将悬停选项绑定一次,以便申请我的所有按钮。

任何帮助都将受到高度赞赏!

1 个答案:

答案 0 :(得分:2)

请参阅Instance and Class Bindings

  

但是Tkinter还允许你在类上创建绑定   应用水平;实际上,您可以在四种不同的上创建绑定   等级:

     
      
  • widget类,使用 bind_class (Tkinter使用它来提供   标准绑定)
  •   

和示例

  

顺便说一句,如果你真的想改变所有文字的行为   应用程序中的小部件,以下是如何使用bind_class方法:

     

top。 bind_class (“文字”,“”,lambda e:无)

因此,bind_class<Enter><Leave>一起使用即可。

-

编辑:示例 - 当鼠标enter/hover任意按钮时,test()将被调用。

from tkinter import *

# ---

def test(event):
    print(event)

# ---

window = Tk()

# created befor binding
Button(window, text="Button #1").pack()
Button(window, text="Button #2").pack()
Button(window, text="Button #3").pack()

window.bind_class('Button', '<Enter>', test)

# created after binding
Button(window, text="Button #4").pack()

window.mainloop()

-

您还可以创建自己的Widget来更改现有的Widget。

红色按钮:

from tkinter import *

# ---

class RedButton(Button):

    def __init__(self, parent, **options):
        Button.__init__(self, parent, **options)
        self['bg'] = 'red'
        # or
        #self.config(bg='red')

# ---

window = Tk()

RedButton(window, text="Button #1").pack()
RedButton(window, text="Button #2").pack()
RedButton(window, text="Button #3").pack()

window.mainloop() 

class RedButton(Button):

    def __init__(self, parent, **options):
        Button.__init__(self, parent, bg='red', **options)

-

修改

如果您只需要在悬停时更改按钮颜色,则无需绑定功能。按钮有activebackground=activeforeground=

import tkinter as tk

root = tk.Tk()

btn = tk.Button(root, text="HOVER", activebackground='blue', activeforeground='red')
btn.pack()

root.mainloop()

请参阅Button

编辑:它在Windows,Linux和OS X上的行为可能不同