![](/img/trans.png)
[英]Tkinter - Right border of LabelFrame broken where label is added
[英]how to add a left or right border to a tkinter Label
以下代碼
import Tkinter as tk
root = tk.Tk()
labelA = tk.Label(root, text="hello").grid(row=0, column=0)
labelB = tk.Label(root, text="world").grid(row=1, column=1)
root.mainloop()
產生
如何向Label
添加部分邊框,以便我有
我看到borderwidth=
是Label
一個可能選項,但它處理四個邊框。
注意:問題不是關於填充單元格(這是以前在重復評論中鏈接的答案的本質)
添加自定義邊框沒有選項或真正簡單的方法,但您可以做的是創建一個繼承自 Tkinter 的Frame
類的類,該類創建一個包含Label
的Frame
。 你只需要用你想要的邊框顏色給Frame
着色,並保持它比Label
稍大一點,這樣它就會給出邊框的外觀。
然后,您無需在需要時調用Label
類,而是調用自定義Frame
類的實例並指定您在類中設置的參數。 下面是一個例子:
from Tkinter import *
class MyLabel(Frame):
'''inherit from Frame to make a label with customized border'''
def __init__(self, parent, myborderwidth=0, mybordercolor=None,
myborderplace='center', *args, **kwargs):
Frame.__init__(self, parent, bg=mybordercolor)
self.propagate(False) # prevent frame from auto-fitting to contents
self.label = Label(self, *args, **kwargs) # make the label
# pack label inside frame according to which side the border
# should be on. If it's not 'left' or 'right', center the label
# and multiply the border width by 2 to compensate
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
# set width and height of frame according to the req width
# and height of the label
self.config(width=self.label.winfo_reqwidth() + myborderwidth)
self.config(height=self.label.winfo_reqheight())
root=Tk()
MyLabel(root, text='Hello World', myborderwidth=4, mybordercolor='red',
myborderplace='left').pack()
root.mainloop()
如果您只需要,例如每次都在右側有 4 個像素的紅色邊框,您可以將其簡化一些。 希望有幫助。
我不相信有一種簡單的方法來添加左邊框。 但是,您絕對可以使用凹陷標簽來愚弄;)
例如:
root=Tk()
Label(root,text="hello").grid(row=1,column=1)
Label(root,text="world").grid(row=2,column=3)
Label(root,relief=SUNKEN,borderwidth=1,bg="red").grid(row=2,column=2)
Label(root).grid(row=2,column=1)
root.mainloop()
這將創建一個您想要看到的窗口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.