Во первых, для того, чтобы обращаться к элементам из функции, нужно их объявлять через self.
# Set up the widgets.
self.p1Edit = QtGui.QSpinBox()
self.res = QtGui.QLineEdit()
self.res2 = QtGui.QLineEdit()
Соответственно добавлять в layer тоже нужно self.<Имя>
layout.addWidget(self.p1Edit, 0, 1, 1, 4)
layout.addWidget(self.res, 2, 1, 1, 4)
layout.addWidget(self.res2, 3, 1, 1, 4)
Дальше, нужно после объявления кнопки нацепить на нее функцию такой конструкцией <имя кнопки>.clicked.connect(<имя функции>)
knopka.clicked.connect(self.operation)
И, наконец, не нужно писать кучу функций, можно обойтись одной:
def operation(self):
i = int(self.p1Edit.text())
self.res.setText(str(i**2))
self.res2.setText(str(i**3))
И все! Остальной код я не трогал. Кстати, если планируется вводить и перемножать не целые числа, а числа с точкой, то вместо i = int(self.p1Edit.text()) нужно написать i = float(self.p1Edit.text())