展开"Python Tkinter对象类型"



发现现有类型有一个问题:

  • 获取Python Tkinter对象类型

然而,我刚刚开发了工具提示(气球(,我已经分配给了一些按钮,并希望能够将所有按钮作为一种独特的类型调用。此外,我还想手工制作画布对象,这些对象将像具有<enter><leave><active><press><release>事件的伪按钮一样操作。如何为它们声明新的对象类型?

如果我正确理解你的问题,你想检查创建的实例是否是自定义类的实例,可以使用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()内置函数来测试对象的类型,因为它考虑了子类。


我没有完全理解你的第二个问题,而且最好把一个问题集中在一个主要问题上,而不是问多个问题。

面向对象编程可能是解决方案。

如果我想创建一个";新型";的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函数接收的事件。

相关内容

  • 没有找到相关文章

最新更新