python 删除用图像创建的tkinter按钮的边框

nwlqm0z1  于 2023-02-15  发布在  Python
关注(0)|答案(9)|浏览(200)

我用我的程序创建了几个按钮,并且让它们包含了图片。但是,现在我想去掉剩下的边框(截图见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)

任何帮助都将不胜感激。

ct2axkht

ct2axkht1#

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)
c9x0cxw0

c9x0cxw02#

如果你使用图像来定义一个自定义按钮,使用标准按钮类而不是ttk按钮类,这样你就可以把borderwidth属性设置为零:

import tkinter as tk
...
backbutton = tk.Button(..., borderwidth=0)

(不相关:调用backbutton.pack()后立即调用backbutton.grid(...)是没有意义的--你只能为一个特定的小部件使用一个,最后调用的那个才有效果。在这种情况下,调用pack是完全无用的)

ttp71kqs

ttp71kqs3#

在使用新Mac时,我遇到了同样的问题,其他答案都没有完全删除按钮周围的边框。我发现将highlightbackground设置为画布的背景色就可以了。

epggiuax

epggiuax4#

可以使用highlightthickness=0和bd=0

hiz5n14c

hiz5n14c5#

到目前为止提供的解决方案都不适用于我的情况。
(我只能怀疑这与最近版本的新MacOS GUI风格政策有关(我使用的是大苏尔)。此外,其他风格选项在MacOS上不起作用,例如,浮雕选项对按钮的外观没有任何影响。
下面是我的解决方案:当你把一个图像放到一个按钮上时,选项 * width * 和 * height * 以像素为单位。当你选择小的值,例如10x10,边框似乎被图像覆盖了。瞧!

ssm49v7z

ssm49v7z6#

这里有一个方法你可以做到这一点..
使用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)

顺便说一句,你不必在ttk按钮中指定style = ..,因为你配置的是ttk使用的默认TButton样式,如果你为这个按钮定义了一个自定义样式,你必须在按钮的关键字参数中指定。
一个例子是给你的按钮圆边,而不是使用图像,以达到预期的效果。

csga3l58

csga3l587#

如果将import函数用作:

from tkinter import *

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

bd = 0不会显示边框。

kwvwclae

kwvwclae8#

我也遇到过同样的问题,无论是bd=0还是highlichtthickness=0都不能单独解决问题,我甚至怀疑relief选项会起作用。
最后帮助(我)的是:pady=0,padx=0
所以对于这个问题:backbutton.config(image=backbuttonimage, highlichtthickness=0, pady=0, padx=0)可以工作。

30byixjq

30byixjq9#

并非所有主题都支持更改borderwidth。请尝试使用tkinter.tk而不是ttk.Button
使用关键字borderwidth=0作为Button的参数。
不能同时使用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()

无边框屏幕截图:

相关问题