使用图像创建的 tkinter 按钮如何去掉边框?

8
我使用我的程序创建了几个按钮并添加了图像。然而,我现在希望移除剩余的边框(请参见http://i.imgur.com/XRlmq39.png 的屏幕截图)。
“返回”按钮的代码示例:
backbutton = ttk.Button(mainframe, command=homereturn)
backbuttonimage = PhotoImage(file="back.gif")
backbutton.config(image=backbuttonimage)
backbutton.pack()
backbutton.grid(column=0, row=1)

非常感谢您的帮助。


遇到了类似的问题,但只在树莓派上出现。在Windows上运行得很好。我正在使用borderwidth=0的tk.Button,但仍然有轮廓线。在这个例子中,我看到我的滑块周围也有类似的轮廓线: https://user-images.githubusercontent.com/13696193/43404372-580639e6-93e5-11e8-9fa1-7841daca2dba.jpg - Mike from PSG
11个回答

17
backbutton = tk.Button(...,  highlightthickness = 0, bd = 0)

这适用于 Python 3.x,我已经尝试过了...

在此输入图片描述

 icon = PhotoImage(file="lock.png")
 self.company_lock_button = Button(self.control_lock_frame, image = icon, highlightthickness = 0, bd = 0)
 self.day_lock_button = Button(self.control_lock_frame, image = icon)
 self.hour_lock_button = Button(self.control_lock_frame, image = icon)

8
如果您正在使用图像来定义自定义按钮,请使用标准按钮类而不是ttk按钮类。这将允许您将borderwidth属性设置为零:
import tkinter as tk
...
backbutton = tk.Button(..., borderwidth=0)

(无关紧要:在调用backbutton.pack()并立即跟随backbutton.grid(...)是没有意义的 - 您只能为特定小部件使用一个,您最后调用的才有任何效果。在这种情况下,对pack的调用是完全无用的。)


2

我使用新的Mac电脑时也遇到了同样的问题,而且其他答案都没有完全去掉按钮周围的边框。我发现将highlightbackground设置为画布的背景颜色可以解决这个问题。


2

我在使用图像按钮时遇到了同样的问题。无论是bd=0还是highlichtthickness=0 单独使用都没有帮助。我甚至怀疑relief选项是否起了作用。

最终帮助我的方法是:pady=0, padx=0

因此,对于所提出的问题:

backbutton.config(image=backbuttonimage, highlightthickness=0, pady=0, padx=0)

可以工作。


这是正确的答案,因为它提到了填充。 - The Amateur Coder

1

到目前为止提供的解决方案都没有在我的情况下起作用。

(我只能怀疑这与最近版本(我使用的是Big Sur)的新MacOS GUI样式政策有关。另外,其他样式选项在MacOS上也不起作用,例如浮雕选项对按钮的外观没有任何影响。)

这是我的解决方案:当您将图像放入按钮时,选项widthheight以像素为单位。当您选择小值,即10x10时,边框似乎被图像覆盖。完成!


1
你可以使用 highlightthickness=0 和 bd=0。

0
我认为你要找的是这个: padding='0,0,0,0'
代码:
ttk.Button( frame, text='B', image='myimg.png', padding='0,0,0,0', command=my_cmd)
抱歉,这么多年后才回复。

0
如果您正在使用 import 函数如下:
from tkinter import *

Button(main_scr, text = "OK", bg = "yellow", bd = 0, command = delete1).pack()

bd = 0 将不显示边框。


1
虽然有帮助,但这不是他们在Q中创建按钮的方式,如果考虑到这个上下文,答案会更有帮助。 - mikebabcock

0
这是一种你可以实现它的方法。
使用ttk.Style()将按钮的背景颜色设置为主框架的颜色。
root_color = "red" #Just an example, can't remember the default tk window color

mainframe = tk.Tk() #or whatever mainframe is
mainframe.configure(bg = root_color)
style = ttk.Style()
style.configure('TButton', background = root_color)
backbutton = ttk.Button(mainframe, command=homereturn)
backbuttonimage=PhotoImage(file="back.gif")
backbutton.config(image=backbuttonimage)
backbutton.pack()
backbutton.grid(column=0, row=1)

作为一个侧面的注释,您不必在这里指定style = ..,因为您正在配置ttk使用的默认TButton样式。如果您为此按钮定义了自定义样式,则必须在按钮的关键字参数中指定此样式。
例如,您可以给您的按钮圆角而不是使用图像来实现所需的效果。

太棒了,但是如果我打算给主机设置一个背景图片怎么办? - Jarrod Jones
使用pack()然后再使用grid()是没有意义的,因为它们不能结合使用。在这种情况下,只会使用grid(),因为这是你最后调用的函数。 - alkanen

0

并非所有主题都支持更改borderwidth。尝试使用tkinter.tk而不是使用ttk.Button

使用关键字borderwidth=0作为按钮参数。

您不能同时使用backbutton.pack()backbutton.grid()。您可以选择其中一个。

代码片段:

from tkinter import ttk
import tkinter as tk
 

mainframe = tk.Tk()
              
def homereturn():
    print('hello')

backbutton = tk.Button(mainframe, command=homereturn, borderwidth=0)
backbuttonimage = tk.PhotoImage(file="p1.png")
backbutton.config(image=backbuttonimage)
backbutton.pack()
 
mainframe.mainloop()

无边框截图:

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接