簡體   English   中英

如何在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) 

    這樣defaultbackgroundcurrentbackground不會在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM