Is is possible to call a ERC20 function inside a ERC721 contract?

You could use the interface if you do not want the full functionality of the contract.

openzeppelin IERC20

You copy full code in your project. Maybe create an interfaces directory. Then import it to your contract:

import "../interfaces/IERC20.sol";

in order to call a contract method, you always need ABI. Since you imported the file into the contract, IERC721 will be globally available in your contract. In order to call transferFrom you need to pass 3 arguments. "from address", "to address", and amount. An example of how to use it will be like this

function stakeTokens(uint256 _amount,address _token) public{
    // add require staments
    // IERC20(_token) this will initialize the contract
    IERC20(_token).transferFrom(msg.sender,address(this),_amount);
 }

In order to interact with an ERC20 token, you have to create an instance of it from the desired contract. You would need to import ERC20 to your nfts contracts, and then create an ERC20 token instance pointing to your token. It would be something like this:

// Inside the nfts contract
ERC20 token = ERC20("your token address here");

And then you will be able to interact with that token as:

token.transferFrom("args");

Hope you find this information useful :)