![](/img/trans.png)
[英]How to expand buttons and labels to fill the x axis in python tkinter?
[英]Expand Python Tkinter Object Types
發現現有類型有這個問題:
但是,我剛剛開發了分配給一些按鈕的工具提示(氣球),並希望能夠將所有這些按鈕作為一種獨特的類型來調用。 此外,我還想手工制作 canvas 對象,這些對象將像具有<enter>
、 <leave>
、 <active>
、 <press>
和<release>
事件的偽按鈕一樣操作。 我如何為他們聲明一個新的 object 類型?
Object 面向編程可能是解決方案。
如果我想創建 tkinter 按鈕的“新類型”,我可以對它進行子類化。
class MySpecialButton(tkinter.Button):
pass
目前這並沒有做任何特別的事情,但會給它一個獨特的類型(如果它正確理解了你的解釋)
以下示例來自我的另一個答案,它創建了一個具有自定義行為的特殊按鈕,用於將鼠標懸停在按鈕上
class HoverButton(tk.Button):
def __init__(self, master, **kw):
tk.Button.__init__(self,master=master,**kw)
self.defaultBackground = self["background"]
self.bind("<Enter>", self.on_enter)
self.bind("<Leave>", self.on_leave)
def on_enter(self, e):
self['background'] = self['activebackground']
def on_leave(self, e):
self['background'] = self.defaultBackground
關於 canvas object,您顯然也可以為這些創建類,其中可以包含移動/調整 object 大小的方法。 至於如何為這些創建自定義事件,您可以使用tag_bind(item, event=None, callback=None, add=None)
將回調綁定到 canvas object。 下面是一個簡單的例子
import tkinter as tk
class CanvasShape:
def __init__(self, canvas, callback = None):
self.canvas = canvas
self.id = canvas.create_oval(10,10,50,50,fill='blue')
self.canvas.tag_bind(self.id,'<Button-1>',callback)
def clicked(e):
print("You clicked on a shape")
root = tk.Tk()
c = tk.Canvas(root,width=200,height=200)
c.grid()
shape = CanvasShape(c,callback=clicked)
root.mainloop()
這將創建一個圓圈,當您單擊它時將觸發一個事件,該事件由clicked
的 function 接收。
如果我正確理解您的問題,您想檢查創建的實例是否是自定義 class 的實例,可以使用isinstance
直接完成:
class CustomTooltip():
pass
cwidget = CustomTooltip()
btn = tk.Button(root)
print(isinstance(cwidget, CustomTooltip)) # True
print(isinstance(b, CustomTooltip)) # False
print(type(cwidget) == CustomTooltip) # Not recommended
建議使用文檔中的isinstance
而不是type
:
建議使用內置的
isinstance()
function 來測試 object 的類型,因為它考慮了子類。
我沒有完全得到你的第二個問題,最好將一個問題集中在一個主要問題上,而不是問一個以上的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.