[英]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.