面向对象的编程可能是解决方案。
如果我想创建一个“新类型”的 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
关于画布对象,您显然也可以为它们创建类,其中可以包含移动/调整对象大小的方法。至于如何为这些创建自定义事件,您可以使用tag_bind(item, event=None, callback=None, add=None) 将回调绑定到画布对象。下面是一个简单的例子
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 函数接收到的事件。