Python一个实例的Tkinter育儿问题

Python Tkinter parenting problem of an instance

我有框架 class A 和 B, Bclass是在Aclass中“创建”的, A 的父级为“self”。

问题:结果显示B在A之外。 没有出现错误。

在另一个 post 中回答了那个小部件 returned None。 因此默认选择根 window。

但打印(实例 B)return“.!实例 B 名称”不是 None。

这是代码:

import tkinter as tk

# class B
class Frm_btn(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, width=24, height=24, bg="green")
        self.parent=parent

# class A
class Frm_tool(tk.Frame):
    def __init__(self):
        tk.Frame.__init__(self, width=48, height=48, bg="blue")
        self.parent=win

        # instance of class B
        self.frm_btn=Frm_btn(self)
        self.frm_btn.pack()

        print(self)# return ".!frm_tool"
        print(self.frm_btn)# return ".!frm_btn"


win=tk.Tk()
win.configure(bg="red")

# instance of class A
frm_tool=Frm_tool()
frm_tool.pack()

win.mainloop()

你好像有点糊涂了。位置参数 master 默认设置或作为第一个参数。 示例:

b = tk.Button() #master is the root window by default 
b.pack()

b2= tk.Button(my_frame) #master is set to my_frame

构造函数 returns 引用不是 None 所述。 None 由每个发送 returns 其他东西的函数返回,这就是 python 的工作方式。

例如:

b = tk.Button()
c = b.pack()
print(c)

另请注意,如果您将变量分配给函数或方法返回的内容,最后返回的值将分配给您的变量。 所以这段代码:

b = tk.Button().pack()

同样是这段代码:

b = tk.Button() #returns a reference
b = b.pack() #returns None

正如@MegaIng 已经向您指出的那样。如果你想在继承 class 中设置主人,你必须明确地这样做。例如:

class Frm_btn(tk.Frame): 
    def __init__(self, parent): 
        tk.Frame.__init__(self,parent, width=24, height=24, bg="green") 
        self.parent=parent