调用类对象的类对象

时间:2017-08-19 15:26:58

标签: python class tkinter

我正在开发一个项目,其中一个classobject必须调用另一个类方法。 但似乎它在我的代码中不起作用。所以我的问题是,如果是的话 可能在类中创建的元素可以调用同一个类的其他方法吗? 这是我的代码:

from tkinter import *

class table():

    def create_root(self):

        self.root = Tk()
        return self.root

    def create_frame(self, master):

        self.frame = Frame(master)
        self.frame.pack()
        return self.frame

    def sidetable(self, master, lst):
        for i in range(len(lst)):
            self.labelside = Label(master, text=lst[i])
            self.labelside.grid(row=i+1, column=0)

    def toptable(self, master, lst):
        for i in range(len(lst)):
            self.labeltop = Label(master, text=lst[i])
            self.labeltop.grid(row=0, column=i+1)

    def create_button_col(self, master, x, y, posles):

        def whitegreen(button, posles):
            if button["bg"]=="white":
                button["bg"]="green"
                posles.append([lenght,hight])

            else:
                button.config(bg="white")
                for i in range(len(posles)):
                    if posles[i]==[lenght,hight]:
                        del posles[i]
                        break

        self.button = Button(master, bg="white")
        self.button.config(command=lambda: whitegreen(self.button, posles))
        self.button.grid(lenght, hight)

    def tableteach(self, master, lenght, hight, posles): # I guess the problem lies somwere here...
        butlst = list(range(hight*lenght))

        for i in range(lenght+1, 1, 1):
            for j in range(hight+1, 1, 1):
                self.butlst[i*lenght+j]=table()
                self.butlst[i*lenght+j].create_button_col(master, i, j, posles)

a = table()
root = a.create_root()
frame = a.create_frame(root)
frame2 = a.create_frame(root)

timelst = ["10:00", "12:00", "14:00", "16:00", "18:00"]
weekdays=["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"]

a.toptable(frame, weekdays)
a.sidetable(frame, timelst)
posles = []
a.tableteach(frame, len(weekdays), len(timelst), posles)

root.mainloop()

1 个答案:

答案 0 :(得分:0)

在方法tableteach中,您的代码首先创建一个引用列表的本地变量butlst

butlst = list(range(hight*lenght))

然后在for - 循环中,您引用self.butlst并期望它成为一个列表。

self.butlst[i*lenght+j]=table()

但你没有定义它。 butlst是您方法的本地变量。 self.butlst应该是table实例的属性,但是您的代码实际上并没有在我能看到的任何地方创建它。 butlstself.butlst