不知道 tkinter 标签在类中定义的位置

问题描述 投票:0回答:1

我找到了我正在制作的 tkinter 弹出窗口的标签类的代码。我不明白这个标签是怎么出现的,但我只是继续下去。然而后来我发现我需要引用创建的标签才能绑定到它。我不知道创建标签的实际位置是哪一行,所以当我尝试将标签分配给变量时,我不知道在哪里。有人可以解释一下这段代码中发生了什么以及我如何回调到我刚刚在类中创建的标签吗?

我发现标签是在使用 super() 的地方创建的,并且与直接传递给类的 Label 参数有关。然而,在研究了 super().init() 之后,我发现它只是允许类使用其他类的参数,所以我仍然对它在引用自身时如何工作感到困惑。我也对直接传递到类中的参数的位置感到困惑(而不是在 init 中) 我尝试将 super() 分配给变量,或者仅使用 Label 作为变量,或者删除 self.一开始。

我制作了一个迷你版的课程来看看发生了什么,但没有成功。这是代码:

from tkinter import *


class Label(Label):
    def __init__(self, root, text, row, col, tag):
        self.text = text
        self.row = row
        self.column = col
        self.root = root
        self.tag = tag
        super().__init__(root)
        self['text'] = self.text
        self.grid(row=self.row, column=self.column)
        # self.label.bind("<Configure>", self.move) # this is the line of code im trying to get to work, but    cant because i dont know where the label is being created. it doesnt work           
    def move(self):
        print('moving')

root = Tk()
display = Toplevel()
output = 0
ans = Label(display, output, 0, 0, 'yes')
root.mainloop()

抱歉,如果这是一个糟糕的问题,或者在其他地方得到了回答,这是我在这里的第一个问题,我很确定还有另一个简单的解决方案,但我只是想了解这里发生的事情

python python-3.x class tkinter super
1个回答
0
投票

我不知道创建标签的实际位置是哪一行

就是这一行:

ans = Label(display, output, 0, 0, 'yes')

这是因为

Label
是 tkinter 的
Label
类的超类,因此该类的任何实例都是标签。在类中,实际标签对象用
self
引用,并在执行此行时创建:

super().__init__(root)

您不需要将

super().__init__(root)
的结果分配给变量。这是由 python 自动处理的。


1 您不应将自定义类命名为与导入类相同的名称。这会让代码更加混乱。我建议您将

Label
类重命名为其他名称,例如
CustomLabel

© www.soinside.com 2019 - 2024. All rights reserved.