To avoid repeating the code of the Radiobutton initialization, we defined a utility method that is called from a list comprehension. We unpacked the values of each tuple of the COLORS list and then passed these local variables as options to Radiobutton. Remember to try to not repeat yourself whenever possible.
Since StringVar is shared among all the Radiobutton instances, they are automatically connected, and we force the user to select only one choice.