gpt4 book ai didi

Python Tkinter Canvas 类继承

转载 作者:太空宇宙 更新时间:2023-11-04 04:13:34 24 4
gpt4 key购买 nike

使用 Tkinter 8.6、Python 3.7.3:

这里一位友好的用户指导我如何通过创建一个 Imgbutton 类来使图像像按钮一样工作,该类是 Tkinter Canvas 的子类。

我对这段代码有一些疑问,这是它的简化版本:

#!/usr/local/bin/python3

import tkinter as tk
from PIL import Image, ImageTk

class Imgbutton(tk.Canvas):

def __init__(self, master=None, image=None, command=None, **kw):

super(Imgbutton, self).__init__(master=master, **kw)
        self.set_img = self.create_image(0, 0, anchor='nw', image=image)
        self.bind_class( self, '<Button-1>',
lambda _: self.config(relief='sunken'), add="+")

self.bind_class( self, '<ButtonRelease-1>',
lambda _: self.config(relief='groove'), add='+')

self.bind_class( self, '<Button-1>',
lambda _: command() if command else None, add="+")

问题:

  1. 当我创建一个 Imgbutton 对象时,上面的分隔线被执行,但我不明白为什么。
  2. self.set_img 是否对应于 Imgbuttontk.Canvas 类的对象?
  3. 这里有没有创建实际 Canvas 的地方?我认为您需要先创建一个 Canvas ,然后才能向其中添加任何内容。

这部分可能没有必要提及,但我在这里创建了一个Imgbutton对象:

root = tk.Tk()

but_img = tk.PhotoImage(file='button.png')

but = Imgbutton(root, image=but_img, width=but_img.width(),
height=but_img.height(), borderwidth=2, highlightthickness=0)
but.pack()

root.mainloop()

最佳答案

When I create an Imgbutton object, the separated line above gets executed but I do not understand why.

它被执行是因为它是代码的一部分。我不确定你为什么认为它不会被调用。如果您不想调用它,请将它移到 __init__ 方法之外。

Does the self.set_img correspond to an object of Imgbuttonor tk.Canvas class?

self 指的是 Imgbutton 类的实例。 set_img 将是 Canvas 在 Canvas 上创建对象时返回的标识符。

Is there any point here where an actual canvas is created?

是的。 Imgbutton 是 Canvas 。这就是继承的工作原理:Imgbutton 是一个 Canvas,具有一些增强功能。它是在您执行 but = Imgbutton(...) 时创建的。不过,当您调用 super 时,可能会更准确地创建实际 Canvas ,这会告诉 tkinter 创建对象。

关于Python Tkinter Canvas 类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55893187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com