[英]How do I overlay these buttons on top of an image for a background in Python Tkinter
[英]How can I create a multiple buttons in tkinter that change the background image when hovering over them?
我正在為數學公式計算器編寫GUI。 我想創建多個按鈕,將它們懸停在它們上面時會改變背景圖像,我真的不知道該怎么做...
我已經嘗試過為按鈕本身創建一個類,以便可以修改其行為,但是它沒有用...
import tkinter as tk
class HoverButton(tk.Button):
def __init__(self, master, **kw):
tk.Button.__init__(self, master=master,**kw)
self.defaultbackground = tk.PhotoImage(file = "GeometricBackground.png")
self.currentbackground = tk.PhotoImage(file = "")
self.bind("<Enter>", self.on_enter)
self.bind("<Leave>", self.on_leave)
def on_enter(self, currentbackground):
image = tk.Label(self, image = currentbackground)
image.pack()
def on_leave(self):
image = tk.Label(self, image = self.defaultbackground)
image.pack()
root = tk.Tk()
classButton = HoverButton(root, currentbackground = "MainMenu.png")
classButton.grid()
root.mainloop()
我真的希望這能減少它,但執行時會顯示此錯誤消息:_tkinter.TclError:未知選項“ -currentbackground”
任何幫助,將不勝感激 :)
您的代碼有幾個問題:
您得到的錯誤是因為您試圖將currentbackground
選項傳遞給HoverButton
但是給出了定義類的方式:
def __init__(self, master, **kw): tk.Button.__init__(self, master=master,**kw)
currentbackground
終止於kw
詞典,您將參數傳遞給沒有currentbackground
選項的標准currentbackground
Button
類,因此出現未知的選項錯誤。 要解決此問題,您可以定義特定於您班級的選項,例如
def __init__(self, master, defaultbackground="", currentbackground="", **kw): tk.Button.__init__(self, master=master, **kw)
這樣defaultbackground
和currentbackground
不會在kw
詞典中結尾。
當事件發生時,綁定到該事件的函數將使用一個參數執行,該“事件”對象包含有關事件的信息(例如指針坐標,事件發生的窗口小部件……),因此您需要在定義on_enter()
和on_leave()
時添加此參數。
您正在創建標簽以將圖像放入其中,然后將此標簽包裝在按鈕中。 這太復雜了(可能會導致按鈕對點擊事件沒有反應)。 button類具有image
選項來設置按鈕的背景圖像,因此您可以使用button.configure(image=<image>)
更改圖像。
將所有這些更改插入代碼
import tkinter as tk
class HoverButton(tk.Button):
def __init__(self, master, defaultbackground="GeometricBackground.png", currentbackground="", **kw):
tk.Button.__init__(self, master=master, **kw)
self.defaultbackground = tk.PhotoImage(file=defaultbackground)
self.currentbackground = tk.PhotoImage(file=currentbackground)
self.configure(image=self.defaultbackground)
self.bind("<Enter>", self.on_enter)
self.bind("<Leave>", self.on_leave)
def on_enter(self, event):
self.configure(image=self.currentbackground)
def on_leave(self, event):
self.configure(image=self.defaultbackground)
root = tk.Tk()
classButton = HoverButton(root, currentbackground="MainMenu.png")
classButton.grid()
root.mainloop()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.