如何防止自动加宽Tkinter小部件(特别是标签)?我的代码中有一个标签,我传递不同长度的字符串。如果字符串比列宽宽(使用网格布局管理器),我宁愿将它们移动到新行而不是拉伸列。下面是一些说明问题的代码。
import Tkinter
class window(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
self.grid()
self.columnconfigure(0, minsize=50)
self.columnconfigure(0, minsize=150)
self.rowconfigure(0,minsize=20)
self.rowconfigure(1,minsize=20)
self.rowconfigure(2,minsize=20)
self.labvar = Tkinter.StringVar()
self.lab = Tkinter.Label(self,bg='white',relief='groove',
textvariable=self.labvar)
self.lab.grid(row=0,column=0,rowspan=2,sticky='NSEW')
self.labvar.set("I don't want this to resize (Y dimension) ...")
self.but = Tkinter.Button(self, text='Click me!',command=self.onbut)
self.but.grid(row=2,column=0, sticky='NSEW')
def onbut(self):
self.labvar.set("I don't want this to resize (Y dimension) ...I'd rather this on a new line!")
if __name__ == "__main__":
app = window(None)
app.title('Window')
app.mainloop()
作为一个快速的注释:避免self.labvar.set("我不......")延伸超过80个字符限制的正确方法是什么?我尝试使用"""并将其分成两行,但然后将该字符串放入带有两行的标签中。
答案 0 :(得分:7)
self.lab = Tkinter.Label(self,bg='white', relief='groove',
textvariable=self.labvar, wraplength=250)
根据The Tkinter Label Widget documentation:
标签可以显示多行文字。您可以使用换行符或使用 wraplength选项使标签自己换行文本。什么时候 包装文本,您可能希望使用锚点和对齐选项 让事情看起来完全如你所愿。
...
<强> wraplength = 强>
确定何时应将标签的文本包装成多行。这是以屏幕为单位给出的。默认值为0(无包装)。
答案 1 :(得分:1)
如果您为标签指定宽度,即使内容发生变化,它也会尽力遵守该宽度。如果添加大于宽度的文本,则文本将被截断。因此,例如,您可以像这样创建标签:
self.lab = Tkinter.Label(self,..., width=40)
如果您希望文本换行,则可以定义wraplength
参数,并且文本的长度将超过值将换行到下一行。不幸的是,wraplength
需要一个屏幕单位(像素)而不是字符宽度,因此您可能需要根据您使用的字体进行一些数学计算。或者,等到渲染原始窗口小部件,获取它的宽度,然后将其用于激活。