The idea is that we need multiple pots for managing all-in situations.
In these cases, the player which is not able to call the amount to get to the next round, can go all-in and participate only in a part of the pot in case of win.
For each pot it will also be needed to write the players who can win that pot and, at the end of the play, to check the winning cards on the different pots to find the winners.
I think the difficult part here is to determine the amounts to put in the pots.
Implementation could be a list of integer or maybe it could be useful to have a Pot object.
I'm not so sure, but I think the Players class is quite redundant. Now that players are stored in the State, we could just store a list of players inside the state (not sure about where to implement functions such as next_to) but I think the code would be cleaner without always repeating the active to access the players.
Currently, it's quite difficult to think about implementing an AI, because of the current implementation of the class Play.
I will follow the vision of a game proposed by the book Artificial Intelligence: A Modern Approach. In particular, the implementation of a State is of primary importance. The refactoring process will probably touch also the module models.py and the gui package.
If the last player of a play folds, at the start of the following play (when the blinds have bet) the first player will automatically fold. There is a problem with consuming the click of the folding button at the end of a play. This is a bug which is not so important, since the other players will be commanded by AI, so the buttons won't be repeated for each player at anytime. Btw it's still annoying.