Python 如何使用类在Tk()窗口中自动插入几个tkinter项

Python 如何使用类在Tk()窗口中自动插入几个tkinter项,python,tkinter,Python,Tkinter,如果这是一个愚蠢的简单问题,我提前表示歉意,但我对att python类非常糟糕,似乎无法让它工作 这是我的密码: from tkinter import * a = Tk() class toolsGUI(): def __init__(self, rootWin): pass def frame(self): frame = Frame(rootWin) frame.configure(bg = 'red')

如果这是一个愚蠢的简单问题,我提前表示歉意,但我对att python类非常糟糕,似乎无法让它工作

这是我的密码:

from tkinter import *

a = Tk()

class toolsGUI():

    def __init__(self, rootWin):
        pass

    def frame(self):
        frame = Frame(rootWin)
        frame.configure(bg = 'red')
        frame.grid()


    def button(self, binding, text):
        btn = Button(rootWin, text=text)
        btn.configure(bg = 'orange', fg = 'black')
        btn.bind('<'+binding+'>')
        btn.grid(row=1, sticky = N+S+E)

我只是想让按钮或框架理解rootWin与uuu init_uuu中的相同,在这种情况下,rootWin应该是变量a,从而将按钮放在Tk窗口中。环顾四周后,我明白这不是做这件事的方法。有没有人有其他可行的建议?

你很接近了。您正在将a传递给toolsGUI初始值设定项,这是正确的第一步。您只需将其保存为实例变量,然后在需要引用根窗口时使用该变量:

def __init__(self, rootWin):
    ...
    self.rootWin = rootWin
    ...

def frame(self):
    frame = Frame(self.rootWin)
    ...
另一种方法是让toolsGUI从框架继承,在这种情况下,您可以将所有小部件放在框架中而不是根窗口中。然后需要额外的步骤将此框架放入根窗口中

class toolsGUI(Frame):
    def __init__(self, rootWin):
        Frame.__init__(self, rootWin)

    def frame(self):
        frame = Frame(self)
        ...
a = Tk()
t = toolsGUI(a)
t.pack(fill="both", expand=True)
a.mainloop()
最后一点建议:如果可以避免的话,不要使用与方法同名的变量。框架是一个糟糕的函数名选择。取而代之的是,将其称为create_frame或其他东西,否则它可能会与类frame和局部变量frame混淆