- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想更改 ttk.Checkbutton 小部件的边框颜色,默认情况下为浅蓝色。我尝试使用 ttk.Style() 的配置功能,并设法在激活时更改整个按钮或其他内容的颜色,但不能更改复选框的边框。另一个问题是我在哪里可以找到此类信息,例如可以以 ttk 样式更改的所有选项的某种文档?
这是我尝试过的示例:
from tkinter import ttk
root = Tk()
s = ttk.Style()
s.configure('MyOwn.TCheckbutton',
background='white',)
s.map('MyOwn.TCheckbutton',
foreground=[('active', 'red')])
cb = ttk.Checkbutton(root,text='Text',style='MyOwn.TCheckbutton')
cb.pack()
root.mainloop()
当我将鼠标悬停在复选框上时,我可以更改文本的颜色,但我不知道如何更改复选框的边框颜色。
最佳答案
我相信您遇到的问题是 Ttk Checkbutton实际上不是一个绘制的小部件,而是一个图像。
如果有人看一下 github 项目 ttkthemes并查看 themes folder ,然后转到 radiance folder (这是一个类似 UBUNTU 的主题)然后 to the folder inside that labelled "radiance" .
人们会看到这样的东西: 我们看到一个充满“GIF”的文件夹,这些是图像文件,如果向下滚动并找到这些文件:
check-dc.gif (Disabled Deselected)
check-du.gif (Disabled Deselected)
check-nc.gif (Normal Selected)
check-nu.gif (Normal Deselected)
如果我们查看这些文件,我们可以看到这些都是复选按钮的所有不同可能状态。
在 Windows 下,这些检查按钮看起来像这样(生成 with this code ):
可以找到关于此的精彩帖子 here ,他们通过在 Canvas 上添加绿色和红色方 block 来创建自定义检查按钮,但是如果有人想要制作类似于您想要的东西怎么办?您可以在其中更改复选按钮的颜色。
首先,让我们将所有检查按钮图像转换为 gif 格式,我已经为您完成了此操作,并且可以从 my Google Drive 下载它们。或者我的Gofile .
您需要从我的 Google 云端硬盘获取:
check-nc.gif (Normal Selected)
check-nu.gif (Normal Deselected)
因为您无需担心停用的值,因为它们永远不会成为焦点。
现在让我们看看他们如何加载上述帖子中的图像:
on_image = tk.PhotoImage(width=48, height=24)
off_image = tk.PhotoImage(width=48, height=24)
on_image.put(("green",), to=(0, 0, 23,23))
off_image.put(("red",), to=(24, 0, 47, 23))
在这里,他们创建了两个空白图像,尺寸为 48 像素 X 24 像素,其中两个在左侧添加了一个绿色方 block ,另一个在右侧添加了一个。
我们的方法类似,但略有不同,相反,我们将加载您下载的两个 gif 文件,然后编写一个脚本,该脚本将制作 4 个矩形,覆盖当前灰色的轮廓检查按钮。就像这样:
import tkinter as tk
root = tk.Tk()
def edit_check(colour, image):
image.put((colour,), to=(0, 0, 1, 13)) # LEFT
image.put((colour,), to=(0, 0, 13, 1)) # TOP
image.put((colour,), to=(12, 0, 13, 13)) # RIGHT
image.put((colour,), to=(0, 12, 13, 13)) # BOTTOM
def focus_in(event):
print(event)
image = off_image if var1.get() == 0 else on_image
edit_check("red", image)
cb1.configure(image=image)
cb1.image = image
def focus_out(event):
print(event)
image = off_image if var1.get() == 0 else on_image
edit_check("black", image)
cb1.configure(image=image)
cb1.image = image
on_image = tk.PhotoImage(file="check-nc.gif") # Instead of creating a new image we open an existing one
off_image = tk.PhotoImage(file="check-nu.gif") # Instead of creating a new image we open an existing one
var1 = tk.IntVar(value=0)
cb1 = tk.Checkbutton(root, image=off_image, selectimage=on_image, indicatoron=False,
onvalue=1, offvalue=0, variable=var1, offrelief='sunken')
cb1.pack(padx=20, pady=10)
# THESE IF YOU WANT TRUE FOCUS
#cb1.bind("<FocusIn>", focus_in)
#cb1.bind("<FocusOut>", focus_out)
# THESE IF YOU WANT MOUSE OVER
cb1.bind("<Enter>", focus_in)
cb1.bind("<Leave>", focus_out)
root.mainloop()
这是适合您的用例的更好的系统(请注意,它不需要任何图像文件,因为文件保存为 base64 字符串)
import tkinter as tk
check_nu = b'iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9TRZEWB4uIOGSoTi2IijpKFYtgobQVWnUwufQLmjQkKS6OgmvBwY/FqoOLs64OroIg+AHi4uqk6CIl/i8ptIjx4Lgf7+497t4BQqPCVLNrHFA1y0jFY2I2tyr2vCKAIAYRwYzETD2RXszAc3zdw8fXuyjP8j735wgqeZMBPpF4jumGRbxBPL1p6Zz3iUOsJCnE58QRgy5I/Mh12eU3zkWHBZ4ZMjKpeeIQsVjsYLmDWclQiaeIw4qqUb6QdVnhvMVZrdRY6578hYG8tpLmOs0RxLGEBJIQIaOGMiqwEKVVI8VEivZjHv5hx58kl0yuMhg5FlCFCsnxg//B727NwuSEmxSIAd0vtv0xCvTsAs26bX8f23bzBPA/A1da219tALOfpNfbWvgI6N8GLq7bmrwHXO4AQ0+6ZEiO5KcpFArA+xl9Uw4YuAX61tzeWvs4fQAy1NXyDXBwCIwVKXvd4929nb39e6bV3w/0UXLbKEvbjQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+MMDRctIGmzOYIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAALElEQVQoz2M0Njb+z0AiYGFgYGA4c+YMI7EaTExM/jMxkAFGNQ1jTYzkpD0ATtMHS/nRiQwAAAAASUVORK5CYII='
check_nc = b'iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9TRZEWB4uIOGSoTi2IijpKFYtgobQVWnUwufQLmjQkKS6OgmvBwY/FqoOLs64OroIg+AHi4uqk6CIl/i8ptIjx4Lgf7+497t4BQqPCVLNrHFA1y0jFY2I2tyr2vCKAIAYRwYzETD2RXszAc3zdw8fXuyjP8j735wgqeZMBPpF4jumGRbxBPL1p6Zz3iUOsJCnE58QRgy5I/Mh12eU3zkWHBZ4ZMjKpeeIQsVjsYLmDWclQiaeIw4qqUb6QdVnhvMVZrdRY6578hYG8tpLmOs0RxLGEBJIQIaOGMiqwEKVVI8VEivZjHv5hx58kl0yuMhg5FlCFCsnxg//B727NwuSEmxSIAd0vtv0xCvTsAs26bX8f23bzBPA/A1da219tALOfpNfbWvgI6N8GLq7bmrwHXO4AQ0+6ZEiO5KcpFArA+xl9Uw4YuAX61tzeWvs4fQAy1NXyDXBwCIwVKXvd4929nb39e6bV3w/0UXLbKEvbjQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+MMDRctDrVlNE0AAAAjdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVAgd2l0aCBsb3ZlyGW0XgAAAJdJREFUKM+d0rENAyEMBdDvKA1zeART07MIGzAFE7EDK1B5CMqf7pIUlyP3JZdP+rItZkb8mScAjDFkF8QY+cCNbCF3R86ZvXduIXdHKYWqipSSXKJP0FqTEMK7Xu+dOWe6+yU4UEpJVBWlFLr7TwAAYmYcY8haC7VWzjkBAGfga+UhBLTWRFVPwREzI0nsjpndO67c+b0XBDxvkWRMW24AAAAASUVORK5CYII='
class example_window:
def __init__(self, master):
self.master = master
chckbox = custom_checkbox(master, "red")
chckbox.pack(padx=20, pady=10)
class custom_checkbox(tk.Checkbutton):
def __init__(self, parent, colour, *args, **kwargs):
default_kwargs = {'image': None, 'selectimage': None, 'indicatoron': False,
'onvalue': 1, 'offvalue': 0, 'variable': None, 'offrelief': 'sunken'}
for key, value in default_kwargs.items():
if key not in kwargs:
kwargs[key] = value
self.colour = colour
self.curr_colour = "black"
self.hover = False
if kwargs['variable'] is None:
self.variable = kwargs['variable'] = tk.IntVar(value=1)
else:
self.variable = kwargs['variable']
print(kwargs, kwargs['variable'].get())
if kwargs['variable'].get() == 0:
if kwargs['image'] is None:
self.off_image = kwargs['image'] = tk.PhotoImage(data=check_nu)
else:
self.off_image = kwargs['image']
if kwargs['selectimage'] is None:
self.on_image = tk.PhotoImage(data=check_nc)
else:
self.on_image = kwargs['selectimage']
else:
if kwargs['image'] is None:
self.on_image = kwargs['image'] = tk.PhotoImage(data=check_nc)
else:
self.on_image = kwargs['image']
if kwargs['selectimage'] is None:
self.off_image = tk.PhotoImage(data=check_nu)
else:
self.off_image = kwargs['selectimage']
tk.Checkbutton.__init__(self, parent, *args, **kwargs)
self.bind("<Enter>", self.focus_in)
self.bind("<Leave>", self.focus_out)
self.variable.trace("w", self.focus_update)
def edit_check(self, colour, image):
image.put((colour,), to=(0, 0, 1, 13)) # LEFT
image.put((colour,), to=(0, 0, 13, 1)) # TOP
image.put((colour,), to=(12, 0, 13, 13)) # RIGHT
image.put((colour,), to=(0, 12, 13, 13)) # BOTTOM
def focus_in(self, event=None):
image = self.on_image if self.variable.get() == self['onvalue'] else self.off_image
self.edit_check(self.colour, image)
self.curr_colour = self.colour
self.configure(image=image)
self.image = image
self.hover = True
def focus_out(self, event=None):
image = self.on_image if self.variable.get() == self['onvalue'] else self.off_image
self.edit_check("black", image)
self.curr_colour = "black"
self.configure(image=image)
self.image = image
self.hover = False
def focus_update(self, *args):
if self.variable.get() == self['onvalue']:
image = self.on_image
else:
image = self.off_image
self.configure(image=image)
self.image = image
if self.hover:
self.focus_in()
def main():
root = tk.Tk()
example_window_gui = example_window(root)
root.mainloop()
if __name__ == '__main__':
main()
如果您希望能够向此小部件添加文本,请查看 this code
关于Python:如何在 ttk.Checkbutton 处于事件状态时更改其边框颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59329304/
我的文本字段需要一个边框,如下图所示。我该怎么做? 最佳答案 试试这些..我希望它能帮助... UITextField *txt=[[UITextField alloc]initWithFrame:C
我尝试通过“GradientDrawable”改变颜色“描边”,但不起作用。 另外,我不知道如何获取 id stroke,并且只更改笔划(我看到 google,所有示例都失败了) 我的 XML 项目
有没有办法如何使用css(理想)来绘制元素边框但只是线条的一部分(在左右边框下方的图像中)? 最佳答案 是的,你可以,像这样,甚至 IE8 也可以这样做: div { position: re
我一直致力于自定义 GUI 框架,因为我无法处理需要通过标记 (XAML) 开发 UI 的托管废话或 native 代码。我正在尝试创建一个使用该 GUI 框架的应用程序原型(prototype),但
以下Microsoft example code包含以下内容: ... ... ... 但是,在运行时,此代码会生成以下数据绑定(bind)
所以基本上我在tex文件的顶部有这样的内容: \setbeamertemplate{footline}{Number \insertframenumber} 这会将“Number ”应用于所有帧的页脚
我不明白为什么我的 HBox 周围没有边框?现在什么也没有发生,除了 eclipse 抛出 IllegalArgumentException 之外,因为我猜是 this.setCenter(hbox)
我正在尝试使用 Colorbox,以便它在加载时打开并提醒访问者 session 注册已开放。我在 Javascript Coder 找到了我正在使用的代码。 我无法让“X”关闭Colorbox来显示
我制作了一个自定义面板,类似于 WrapPanel 但带有列(或类似于 Grid 但项目自动定位在网格中)。 这是它的样子: 我想在我的面板上有一个属性,它在每一列之间划一条线。是否可以在自定义面板上
我正在尝试为我的页面制作边框,但我没有这样做..我的代码是 @drawable/custom_border 我的问题是,黑色设置为整个 View (作为背景),我想要黑色边框而不是黑色背景
我目前正在开发一个小游戏,但我无法让圆圈正确击中左侧和顶部 Canvas 边框。它正确地击中了右侧和底部。 圆可以用 W A S D 移动,并且必须正确地碰到 Canvas 的所有边界 这是代码:ht
我有一个像这样的图像 slider :
如何绘制具有透明度的png图像轮廓(边框)。 就像我们有这张图片: 我们想要这个: 我正在通过 HTML5 创建图像阴影,但无法获得我想要的。我想使用 HTML5 或 jquery 或两者来绘制它,如
在我们的主页上,我们有几个元素作为菜单点。(图片+标题+小说明)。问题是当鼠标悬停时,菜单元素总是有边框。 (即使我隐藏边框)。 你可以看看:www.scf-software.com 图片问题: im
我对 HTML 和 CSS 完全陌生,所以我希望有人能给我指出正确的方向。我试图理解本教程以制作视差滚动网站: http://ihatetomatoes.net/simple-parallax-scr
如何使底部边框正好位于文本框下方? div { border-bottom: solid 2px #354458; } p { color: #ffffff; background-col
本质上,我想应用一个 bottom-border,但我不希望它位于单元格的底部,而是位于死 Angular 。 如何仅使用 CSS 和 HTML(并且不使用图形)做到这一点? 假设单元格/行的高度为
我有一个带有线性渐变的 block (div)。有没有可能让右上角切出一个三 Angular 形? 例如,你有 border-radius 5px 来制作一个圆 Angular 的 block 。但是
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 6 年前。 Improve this qu
我想按照下面的设计图实现下拉按钮。查看下拉菜单在按钮中间后开始。我的问题是按钮具有透明背景以利用根父 div 中的背景图像。 到目前为止,我已经实现了下图。正如我上面所说,我想在 border-rad
我是一名优秀的程序员,十分优秀!