首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Python中将无线电按钮的文本标签移动到按钮下面?

如何在Python中将无线电按钮的文本标签移动到按钮下面?
EN

Stack Overflow用户
提问于 2017-01-09 07:26:15
回答 3查看 4.2K关注 0票数 7

我想知道是否有办法将一个无线电按钮的标签文本移到另一个区域,例如在实际按钮下面。

下面是使用栅格放置几个无线电按钮的例子,我正在使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()

下面是运行代码时帧的图像:

正如你可以看到的,默认是在按钮的一边,但我正在寻找一种方式来移动下面的文本,我似乎找不到任何解决这个问题的办法!

谢谢你,拉杰

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-09 21:21:48

我的想法是尝试修改ttk.RadioButton的布局元素或元素的选项。见http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/ttk-layouts.html

其元素的布局似乎由一个标签组成,该标签位于焦点内,即内部指示器,即填充内(请参见下面的变量rbLayout)。指示符的边选项值左。标签的锚选项显示为空白。我认为改变这两种选择可能会得到你想要的。您还必须将选项"style=your_customed_stylename“添加到ttk.Radiobutton声明中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> 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'>

更新:

  1. 我认为rbLayout变量显示,默认情况下,Radiobutton.padding包含两个子元素,即Radiobutton.indicator和Radiobutton.focus,它们位于Radiobutton.padding的左侧。此外,Radiobutton.focus包含Radiobutton.label。更正我先前的解释。
  2. 为了实现所描述的布局,我认为described .指示器的‘侧’键应该有值'top‘,’粘滞‘键应该有值'n’。此外,无线电按钮。焦点的‘侧边’键应该有值‘底部’,‘粘性’值应该是‘。
  3. 我创建了一个脚本来实现这些更改。见下面的代码。但是,这是行不通的。令我惊讶的是,无线电按钮的布局没有改变。不明白为什么它不起作用。

希望更有知识的人能够解释为什么对Radiobutton元素布局的修改没有更改到所需的布局。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)

更新2:解决方案

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)

非常感谢:) j_4321在我建议的方法基础上构建的最新解决方案。我已经将它实现到我以前的代码中(见上面),并且它可以工作。我想强调以下几点:

  1. 我的代码显示了对Radiobutton的默认样式'TRadiobutton'的布局所做的更改,而不是使用更改的布局创建新样式。这种差异的优点似乎克服了j_4321第二解决方案提到的缺点。也就是说,适用于所有ttk主题(“clam”、“alt”、“default”、“”),而不仅仅是“clam”和“alt”。至少这可以在我的Linux16.04平台上工作。
  2. 前面代码中的错误是,我创建了s.layout()的一个新实例(即m= s.layout()),并更改了它的布局,而不是实际更改默认Radiobutton样式s.layout('TRadiobutton')的布局。我从j_4321的解决方案中了解到,one可以通过添加更改后的小部件布局细节作为元组(小部件的默认样式名称)中的第二个术语来更改默认样式的布局,即ttk.Style.layout(小部件的默认样式名称)。“‘TRadiobutton”,更改了小部件的布局细节)。
  3. 若要将Radiobutton指示器的位置更改为显示在其标签顶部,则更改为RadioBuon.Indicator的“side”值为“top”仅需。对讲机按钮的更改。焦点的“侧边”值对无线电按钮的布局没有影响。
票数 3
EN

Stack Overflow用户

发布于 2017-01-09 07:48:47

在无线电按钮中没有设置文本位置的选项,所以我能想到的最简单的解决方法是移除无线电按钮文本并在其下面放置一个标签。

此外,我宁愿让MainGUI类继承Tk而不是Frame,这样就不必在if __name__ == '__main__':部分创建根窗口,但这只是一个建议。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from tkinter import *
from tkinter import ttk

class MainGUI(Tk):

    def __init__(self):
        Tk.__init__(self)
        self.geometry("300x100")
        self.configure(background="white")
        self.mainframe = ttk.Frame(self, 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,  value=0).grid(column=1, row=2)
        ttk.Label(self.mainframe, text="Button 1").grid(column=1, row=3, padx=4)
        ttk.Radiobutton(self.mainframe,  value=1).grid(column=2, row=2)
        ttk.Label(self.mainframe, text="Button 2").grid(column=2, row=3, padx=4)
        ttk.Radiobutton(self.mainframe,  value=2).grid(column=3, row=2)
        ttk.Label(self.mainframe, text="Button 3").grid(column=3, row=3, padx=4)
        ttk.Radiobutton(self.mainframe,  value=3).grid(column=4, row=2)
        ttk.Label(self.mainframe, text="Button 4").grid(column=4, row=3, padx=4)
        self.mainloop()

if __name__ == '__main__':
    app = MainGUI()

备注:为了获得这张照片,我还使用了一个ttk.Style来获得更好的结果。

票数 4
EN

Stack Overflow用户

发布于 2017-01-10 08:34:30

正如太阳熊所建议的那样,另一种在按钮下面获取无线电按钮标签的方法是自定义ttk样式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from tkinter import *
from tkinter import ttk

class MainGUI(Tk):

    def __init__(self):
        Tk.__init__(self)
        self.geometry("300x100")
        self.configure(background="white")
        self.mainframe = ttk.Frame(self, 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)
        style = ttk.Style(self)
        style.theme_use('clam')
        # create custom radiobutton style layout
        style.layout('CustomRadiobutton', 
                     [('Radiobutton.padding',
                       {'children': 
                           [('Radiobutton.indicator', 
                             {'side': 'top', 'sticky': ''}), # changed side from left to top
                            ('Radiobutton.focus',
                             {'children': [('Radiobutton.label', {'sticky': 'nswe'})],
                              'side': 'top', # changed side from left to top
                              'sticky': ''})],
                        'sticky': 'nswe'})])
        style.configure('TFrame', background="white")
        style.configure('CustomRadiobutton', background="white")
        ttk.Radiobutton(self.mainframe, style='CustomRadiobutton',
        text="Button 1", value=0).grid(column=1, row=2, padx=4)
        ttk.Radiobutton(self.mainframe, style='CustomRadiobutton',
        text="Button 2", value=1).grid(column=2, row=2, padx=4)
        ttk.Radiobutton(self.mainframe, style='CustomRadiobutton',
        text="Button 3", value=2).grid(column=3, row=2, padx=4)
        ttk.Radiobutton(self.mainframe, style='CustomRadiobutton',
        text="Button 4", value=3).grid(column=4, row=2, padx=4)
        self.mainloop()

if __name__ == '__main__':
    app = MainGUI()

然而,这并不适用于所有ttk主题。它适用于clam和alt,但提供了在linux中无法选择的经典和默认按钮。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41551294

复制
相关文章
tk基础--标签、按钮
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
xbhog
2019/10/28
1.6K0
iOS 点击按钮复制文本
UIPasteboard *pab = [UIPasteboard generalPasteboard]; NSString *string = @"测试"; pab.string = string; if (pab == nil) { [MBProgressHUD showError:@"复制失败"]; }else {
Lee坚武
2020/10/10
4.1K0
iOS 点击按钮复制文本
Flutter的文本、图片和按钮使用
像视图数据流转机制、底层渲染方案、视图更新策略等知识,都是构成一个UI框架的根本,看似枯燥,却往往具有最长久的生命力。
JavaEdge
2023/07/09
6280
Flutter的文本、图片和按钮使用
【HTML】HTML 表单 ② ( 按钮表单 | 普通按钮 | 提交按钮 | 重置按钮 | 图片按钮 | 文件域 )
将 <input /> 标签 的 type 属性设置为 button , 就可以将该 表单组件 设置为 普通按钮 类型表单 ;
韩曙亮
2023/03/30
8.2K0
【HTML】HTML 表单 ② ( 按钮表单 | 普通按钮 | 提交按钮 | 重置按钮 | 图片按钮 | 文件域 )
jQuery Mobile(jqm)按钮的隐藏和显示,包括a标签,圆角和非圆角按钮
在移动互联网时代,HTML5开发越来越收到欢迎。于是各种HTML5的框架都出来了。由于对于jquery的熟悉,jquery mobile 为多数人选择学习的对象。我也是众多追求者之一。最近一直在开发jQuery Mobile的相关应用。并颇有心得,再这里和大家一起分享一下。 好了,我们之间上代码:
业余草
2019/01/21
3.5K0
jQuery Mobile(jqm)按钮的隐藏和显示,包括a标签,圆角和非圆角按钮
如何在 Vim 中将光标移动到行首或行尾?
将光标从行首或行尾移动并不是一项关键操作,但您可能会经常做一些事情,以至于反复捣碎h或l键会让人感到恼火,或者更糟的是,效率低下。
网络技术联盟站
2022/06/09
13.7K0
如何在 Vim 中将光标移动到行首或行尾?
python 按钮的响应事件
在PyCharm中创建一个项目,然后点击“Tools”--“External Tools”--“QTDesinger”打开QT Desinger
py3study
2020/01/06
2.9K0
jQuery 点击按钮打印指定文本内容
这是在做 JavaScript 调用浏览器打印快递单功能时所遇到的一些坑,总结了一下,分享给大家
Nian糕
2018/08/21
4.1K0
jQuery 点击按钮打印指定文本内容
Python点击网站按钮
今天需要做个能控制网站按钮的功能,原因是有些网站不是分页的,而是需要点击”show more” 或者“”点击加载更多“ 按钮。才能看到更多的内容,网址和首页网址一样。
py3study
2020/01/13
2.8K0
Excel实战技巧65: 制作漂亮的用户窗体按钮——当鼠标移动到按钮上时高亮显示
在很多场合,我们都能看到这样的效果,当鼠标移动到某个元素上面时,该元素会变成另外一种颜色,达到强调的效果。下面,我们来实现当鼠标移动到用户窗体按钮上时,会使用颜色高亮显示,让用户窗体更生动,如下图1所示。
fanjy
2019/12/04
8.6K0
select选择标签自定义下拉按钮
<select><option value="" disabled selected style="display:none;">请选择时间</option></select>select::-ms-expand { display: none; } //兼容ie隐藏select{ appearance: none; -moz-appearance: none; -webkit-appearance: none; background: url(../images/go.
马克社区
2022/07/18
1.6K0
如何在 Linux 中将主目录移动到新分区或磁盘?
如果您是 Linux 新手或打算放弃 Windows 并切换到 Linux 的人,那么本文将对您很有用,这篇分步文章将引导您完成在 Linux 中将主目录移动到新分区或驱动器的过程。
网络技术联盟站
2022/03/02
3.3K0
如何在 Linux 中将主目录移动到新分区或磁盘?
WordPress网站底部的自定页面(如:网站地图等)按钮美化教程
最近浏览博客,看到不少朋友这个底部的美化,我也觉得底部的这些按钮平平无奇,就想着用css设置一个样式,从而美化按钮方法,至此分享给大家。
文曦
2022/06/09
1K0
WordPress网站底部的自定页面(如:网站地图等)按钮美化教程
python中scrapy点击按钮
本文介绍了如何用scrapy和selenium实现微博的搜索和页面跳转。首先介绍了使用FormRequest.from_request()函数进行搜索,发现没有效果后,改用selenium实现点击功能。然而,由于账号限制,不能使用cookies登录,因此探索了其他方法实现微博的搜索和页面跳转。最后发现,可以通过规则的方法实现微博的搜索和页面的跳转。
用户1148830
2018/01/03
4.5K0
单标签下的日间/黑夜模式切换按钮效果
想必很多同学都看到这张图,是一个开发小哥被一个日间/黑夜模式切换按钮效果逼疯的视频。
Sb_Coco
2023/07/10
3370
单标签下的日间/黑夜模式切换按钮效果
Xamarin.Forms 按钮样式 圆角按钮
在 Xamarin 中可以方便进行样式定义或不进行定义样式只修改属性而改变外观,如按钮的圆角可以通过 CornerRadius 属性设置
林德熙
2020/12/07
3.2K0
python的tkinter编程(十)Radiobutton单选按钮,CheckButton复选按钮 的详细解读
Radiobutton单选按钮 CheckButton复选按钮
一写代码就开心
2020/11/20
1.9K0
python的tkinter编程(十)Radiobutton单选按钮,CheckButton复选按钮  的详细解读
按钮与交互-使用按钮触发操作
在本节中,我们将介绍一个重要且简单的元素,即按钮。这个小元素可以改变整个UX。我们将使用该按钮来缩放我们的3D模型。此外,我们将尝试更改手机的壁纸。对于您的型号,如果您有不同的材质或颜色,您也可以更改它。
iOSDevLog
2019/06/17
4.6K0
按钮与交互-使用按钮触发操作
点击加载更多

相似问题

Python3无线电按钮控制标签文本

12

如何在React中将按钮下移到文本下面

12

Javascript更改无线电按钮标签的文本

12

如何在按钮元素中将图像放置在文本下面?

23

更改无线电按钮的标签

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文