How to pass the 2D array from one class to another in Tkinter?

Viewed 200

I am trying to write my first app using Tkinter. I can't understand at all how it is possible to pass the data on variables in the 2D array (entered by user) from one class to another. Tried to change something, but nothing turned out. I will be very grateful for any help or advice.

from Tkinter import *

date_index = [2017, 2018, 2019, 2020, 2021]
product_name = ['product 1', 'product 2', 'product 3', 'product 4', 'product 5']

class main: 
    def __init__(self, master):
        self.master = master
        self.master.title('revenue calc')

        Button(self.master, text = 'quantity', command=self.q_button).pack()
        Button(self.master, text = 'prices', command=self.p_button).pack()

        self.master.mainloop()

    def q_button(self):
        q_child(self.master)

    def p_button(self):
        p_child(self.master)

class q_child:
    def __init__(self, master):
        self.slave = Toplevel(master)
        self.slave.title('quantity')

        self.corner_frame = Frame(self.slave)
        self.corner_frame.grid(row=0, column=0)

        self.left_frame = Frame(self.slave)
        self.left_frame.grid(row=1, column=0)

        self.head_frame = Frame(self.slave)
        self.head_frame.grid(row=0, column=1)

        self.main_frame = Frame(self.slave)
        self.main_frame.grid(row=1, column=1)

        self.button_frame = Frame(self.slave)
        self.button_frame.grid(row=2, column=1)


        for i in range(len(product_name)):
            self.testlabel = Label(self.left_frame, text = product_name[i])
            self.testlabel.grid(row=i, column=0)

        for j in range(len(date_index)):
            self.testlabel1 = Label(self.head_frame, width = 5, text = date_index[j])
            self.testlabel1.grid(row=0, column=j)

        self.q0 = []

        for j in range(len(date_index)):
            self.q0.append([])
            for i in range(len(product_name)):
                self.q0[j].append(Entry(self.slave, width = 5, text=""))
                self.q0[j][i].grid(row=j, column=i, in_ = self.main_frame)

        self.save_q_button = Button(self.button_frame, text = 'save', command = self.save_q_data)
        self.save_q_button.pack()

    def save_q_data(self):
        self.q = []

        for j in range(len(date_index)):
            self.q.append([])
            for i in range(len(product_name)):  
                self.q[j].append(float(self.q0[j][i].get()))

class p_child:
    def __init__(self, master):
        self.slave = Toplevel(master)
        self.slave.title('prices')

        self.corner_frame = Frame(self.slave)
        self.corner_frame.grid(row=0, column=0)

        self.left_frame = Frame(self.slave)
        self.left_frame.grid(row=1, column=0)

        self.head_frame = Frame(self.slave)
        self.head_frame.grid(row=0, column=1)

        self.main_frame = Frame(self.slave)
        self.main_frame.grid(row=1, column=1)

        self.button_frame = Frame(self.slave)
        self.button_frame.grid(row=2, column=1)


        for i in range(len(product_name)):
            self.testlabel = Label(self.left_frame, text = product_name[i])
            self.testlabel.grid(row=i, column=0)

        for j in range(len(date_index)):
            self.testlabel1 = Label(self.head_frame, width = 5, text = date_index[j])
            self.testlabel1.grid(row=0, column=j)

        self.p0 = []

        for j in range(len(date_index)):
            self.p0.append([])
            for i in range(len(product_name)):
                self.p0[j].append(Entry(self.slave, width = 5, text=""))
                self.p0[j][i].grid(row=j, column=i, in_ = self.main_frame)

        self.save_p_button = Button(self.button_frame, text = 'save', command = self.save_p_data)
        self.save_p_button.pack()

    def save_p_data(self):
        self.rev = []
        self.revall = []
        self.p = []

        for j in range(len(date_index)):
            self.rev.append([])
            self.p.append([])
            self.s = 0
            for i in range(len(product_name)):  
                self.p[j].append(float(self.p0[j][i].get()))
                self.rev[j].append(self.p[j][i]*q[j][i]) # NameError: global name 'q' is not defined
                self.s += self.rev[j][i]
            self.revall.append(self.s)  

root = Tk()
main(root) 
1 Answers
Related