【问题标题】:Remove border of Tkinter label移除 Tkinter 标签的边框
【发布时间】:2017-10-17 21:24:33
【问题描述】:

以下代码

from tkinter import *
window=Tk()
lbl=Label(window,width='30',height='15',relief='solid')
lbl.pack()
window.mainloop()

产生this

有没有办法只去除一侧的边框?

【问题讨论】:

  • 没有,但您可以将创建的框架放置在所述框架内并带有标签,并使用它来创建边框。它有点高级,但可以做到。

标签: python python-3.x tkinter python-3.6


【解决方案1】:

在 Q/A here 上使用示例(我会将其作为重复问题链接,但它需要一些调整才能与此 OP 的问题进行比较。)

我们可以创建一个看起来像标签的东西,它在 3 侧有边框,而在一侧没有边框。

from tkinter import *

class MyLabel(Frame):
    def __init__(self, parent, myborderwidth=0, mybordercolor=None,
                 myborderplace='center', *args, **kwargs):
        Frame.__init__(self, parent, bg=mybordercolor)
        self.propagate(False)
        self.label = Label(self, *args, **kwargs)

        if myborderplace is 'left':
            self.label.pack(side='right')
        elif myborderplace is 'right':
            self.label.pack(side='left')
        else:
            self.label.pack()
            myborderwidth = myborderwidth * 2

        self.config(width=self.label.winfo_reqwidth() + myborderwidth)
        self.config(height=self.label.winfo_reqheight() + myborderwidth)

root=Tk()
root.geometry("50x50")
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)

MyLabel(root, text='Hello World', myborderwidth=2, mybordercolor='black',
        myborderplace='right').grid()

root.mainloop()

结果:

【讨论】:

  • 使用 Canvas 代替 Label 会更简单吗?
  • @NafRose 好吧,我不确定。我将不得不尝试写一个例子。你可以试一试,看看你能走多远。
【解决方案2】:

如果我使用 Canvas 而不是 Label,我可以通过在边缘创建线条来在三个边上创建边框。 示例代码:

from tkinter import *
root=Tk()
canvas=Canvas(height='250',width ='250')
canvas.create_line(251,0,251,251,width=2,fill='black')
canvas.create_line(3,3,251,3,width=2,fill='black')
canvas.create_line(3,251,252,251,width=2,fill='black')
canvas.pack()
root.mainloop()

输出this

不过可能还有更实用的方法。

【讨论】: