My thought is to try to make changes to the ttk.RadioButton layout elements or element. See http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/ttk-layouts.html .
The layout of its element seems to consist of a label inside the focus, inside the indicator, which is inside the indentation (see the rbLayout variable below). The Radiobutton.indicator option parameter remains aloof. The Radiobutton.label binding option is displayed blank. I think that changing any of these options may get what you want. You also need to add the option "style = your_customed_stylename" to your ttk.Radiobutton declaration.
>>> import tkinter.ttk as ttk >>> s = ttk.Style() >>> rb = ttk.Radiobutton(None, text='RB1') >>> rbClass = rb.winfo_class() >>> rbClass 'TRadiobutton' >>> rbLayout = s.layout('TRadiobutton') >>> rbLayout [('Radiobutton.padding', {'sticky': 'nswe', 'children': [('Radiobutton.indicator', {'sticky': '', 'side': 'left'}), ('Radiobutton.focus', {'children': [('Radiobutton.label', {'sticky': 'nswe'})], 'sticky': '', 'side': 'left'})]})] >>> type(rbLayout) <class 'list'>
Update:
- I think the rbLayout variable shows that by default Radiobutton.padding contains two children, i.e. Radiobutton.indicator and Radiobutton.focus, and they are located on the left side of Radiobutton.padding. Moreover, Radiobutton.focus contains Radiobutton.label. Correction to my earlier explanation.
- To achieve the described layout, I think that the Radiobutton.indicator "Side" should be set to "top", and the "sticky" key should be set to 'n'. In addition, the side key of "Radiobutton.focus" should be set to "bottom" and "sticky" should be "s".
- I created a script to make changes. See below code. However, this did not work. I am surprised that the raster plan cannot be changed. They did not understand why this did not work.
I hope someone more knowledgeable can explain why the amendments to the layout of the Radiobutton elements have not changed to the required layout.
import tkinter as tk import tkinter.ttk as ttk root = tk.Tk() root.geometry("300x100") s = ttk.Style() m = s.layout('TRadiobutton') print('TRadiobutton.Layout : Default') print(m , "\n") # Change to default Radiobutton.indicator elements list(list(m[0])[1]['children'][0])[1]['side'] = 'top' list(list(m[0])[1]['children'][0])[1]['sticky'] = 'n' # Change to default Radiobutton.focus elements list(list(m[0])[1]['children'][1])[1]['side']='bottom' list(list(m[0])[1]['children'][1])[1]['sticky']='s' print('TRadiobutton.Layout : Amended') print(m, "\n") frame1 = ttk.Frame(root) frame1.grid() rb1 = ttk.Radiobutton(frame1, text="Button 1") rb1.grid() root.rowconfigure(0, weight=1) root.columnconfigure(0, weight=1)
Update 2: SOLUTION
import tkinter as tk import tkinter.ttk as ttk root = tk.Tk() root.geometry("300x100") s = ttk.Style() s.theme_use('default') print('TRadiobutton.Layout : Default') print(s.layout('TRadiobutton'), "\n") s.layout('TRadiobutton', [('Radiobutton.padding', {'children': [('Radiobutton.indicator', {'side': 'top', 'sticky': ''}),

Thanks a lot :) j_4321 for his latest solution based on my proposed approach. I applied it (see above) to my previous code, and it works. I like to highlight the following:
- My code shows the changes made to the default Radiobutton style layout "TRadiobutton" , instead of creating a new style with a modified layout. The advantage of this difference seems to be overcome by mentioning the flaws of the j_4321 2nd solution. That is, it works on all ttk themes ('clam', 'alt', 'default', 'classic') , and not just on 'clam' and 'alt'. At least this works on my Linux 16.04 platform.
- The error in my previous code was that I created a new instance of s.layout () (i.e. m = s.layout ()) and changed its layout instead of actually changing the default layout of the Radiobutton s.layout ('TRadiobutton style '). I learned from j_4321's solution that you can change the default style layout by adding the changed widget layout details as a second term in tuple ttk.Style.layout (default style name for the widget) i.e. ttk.Style.layout (the default style name for the widget, for example, "TRadiobutton", [modified widget layout information]) .
- To change the position of the Radiobutton indicator displayed at the top of its label, you need to change the value of the "Radiobutton.indicator" side to "top" . Changes to the Radiobutton.focus side value did not affect Radiobutton's layout.