Raj*_*bal 6 python tkinter radio-button
我想知道是否有办法将radiobutton的标签文本移动到不同的区域,例如在实际按钮下方.
下面是一个使用我正在使用的网格放置的几个radiobutton的示例:
from tkinter import *
from tkinter import ttk
class MainGUI(Frame):
def __init__(self, parent):
self.parent = parent
Frame.__init__(self, parent, background="white")
self.mainframe = ttk.Frame(root, padding="8 8 12 12")
self.mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
self.mainframe.columnconfigure(0, weight=1)
self.mainframe.rowconfigure(0, weight=1)
ttk.Radiobutton(self.mainframe, text="Button 1", value=0).grid(column=1, row=2)
ttk.Radiobutton(self.mainframe, text="Button 2", value=1).grid(column=2, row=2)
ttk.Radiobutton(self.mainframe, text="Button 3", value=2).grid(column=3, row=2)
ttk.Radiobutton(self.mainframe, text="Button 4", value=3).grid(column=4, row=2)
if __name__ == '__main__':
root = Tk()
root.geometry("300x100")
app = MainGUI(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
下面是代码运行时帧的图像:

你可以看到默认是在按钮的一侧,但我正在寻找一种方法来移动下面的文本,我似乎找不到任何解决这个问题的方法!
谢谢,拉吉
我的想法是尝试修改 ttk.RadioButton 的布局元素或元素的选项。请参阅http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/ttk-layouts.html。
其元素的布局似乎由一个标签组成,该标签位于焦点内部,位于指示器内部,位于填充内部(参见下面的变量 rbLayout)。Radiobutton.indicator 的侧面选项值保留。Radiobutton.label 的锚点选项显示为空白。我认为改变这些选项中的任何一个都可能得到你想要的。您还必须将选项“style=your_customed_stylename”添加到您的 ttk.Radiobutton 声明中。
>>> 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'>
Run Code Online (Sandbox Code Playgroud)
更新:
希望更有知识的人能够解释为什么对 Radiobutton 元素布局的修改没有更改为所需的布局。
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)
Run Code Online (Sandbox Code Playgroud)
更新 2:解决方案
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': ''}), # Just need to change indicator's 'side' value
('Radiobutton.focus', {'side': 'left',
'children':
[('Radiobutton.label', {'sticky': 'nswe'})],
'sticky': ''})],
'sticky': 'nswe'})])
print('TRadiobutton.Layout : Amended')
print(s.layout('TRadiobutton'), "\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)
Run Code Online (Sandbox Code Playgroud)
非常感谢 j_4321 基于我建议的方法提供的最新解决方案。我已经将它实现(见上文)到我之前的代码中并且它有效。我想强调以下几点:
| 归档时间: |
|
| 查看次数: |
1500 次 |
| 最近记录: |