如何在不写 class 的情况下访问 Tkinter 中按钮的父级?

How to access a button's parent in Tkinter without writing class?

有没有办法在不将父级保存在对象属性中的情况下找到小部件的父级(特别是按钮)?

but = Button(main_window, text = "close window!")
but.bind("<Button-1>", btn_handler)

def btn_handler(e):
    e.parent().destroy() # I need something like this!
    # e.parent() ==>> main_window
    # without writing class and defining self.parent ...

我在互联网上搜索了几个小时,但没有找到合适的答案。

您可以使用 but.master 访问 but 对象的父对象。

要获取处理回调的小部件的容器小部件,您可以执行以下操作:

def callback(evt):
    handling_widget = evt.widget
    parent_of_handling_widget = handling_widget.master
    # or evt.widget.master
    parent_of_handling_widget.destroy()

就是说,我不太确定您为什么要避免使用自定义 class。这是您问题的自然解决方案。

import tkinter
from tkinter import ttk

class MyButton(ttk.Button):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.configure(command=self.callback)

    def callback(self):
        self.master.destroy()

tk = tkinter.Tk()
b = MyButton(tk, text="close window!")
b.pack()  # or whatever geometry manager you're using

# we're done!