我在python tkinter中编写了一个类,您可以使用它创建在休假,输入和按钮1事件中更改其图像的按钮 .
剧本:
from tkinter import *
class ImageButton:
def CreateButton(self, image, root):
# --- image setup ---
self.ImageName = image
self.ButtonRoot = root
self.normal = PhotoImage(file="Images/" + self.ImageName + "/normal.png")
self.hover = PhotoImage(file="Images/" + self.ImageName + "/hover.png")
self.clicked = PhotoImage(file="Images/" + self.ImageName + "/clicked.png")
# --- button setup ---
self.Button = Button(self.ButtonRoot, image=self.normal)
self.Button.bind("<Leave>", self.normal_event)
self.Button.bind("<Enter>", self.hover_event)
self.Button.bind("<Button-1>", self.click_event)
return self.Button
def normal_event(self, event):
self.Button.config(image=self.normal)
def hover_event(self, event):
self.Button.config(image=self.hover)
def click_event(self, event):
self.Button.config(image=self.clicked)
Root = Tk()
Image = ImageButton()
FirstButton = Image.CreateButton("scann_device", Root)
FirstButton.grid(row=0, column=0)
SecondButton = Image.CreateButton("get_device_info", Root)
SecondButton.grid(row=1, column=0)
Root.mainloop()
因此,如果您创建一个具有该类的按钮,您可以执行任何您想要的操作 . 它只会将它与我上面提到的事件联系起来 . 如果你创建了1个按钮,它可以工作,你可以在窗口看到它,但如果你创建2个按钮并网格/打包它们,它就不会工作 . 它看起来像this . 第二个按钮也会获得第一个按钮的命中框 .
1 回答
您只启动
Image
的一个实例 . 因此,在第二次调用CreateButton()
时,所有类对象(self.normal
,self.ImageName
,self.Button
)都会被新值覆盖 .你可能最好从tkinter Button继承一个类并添加自己的函数 . 看这个例子: