【问题标题】:Preventing tkinter labels being stretched by a long string防止 tkinter 标签被长字符串拉伸
【发布时间】:2014-09-19 12:28:32
【问题描述】:

如何防止 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("I dont...") 行超过 80 个字符限制的正确方法是什么?我尝试使用 """ 并将其分成两行,但字符串随后也用两行放入标签中。

【问题讨论】:

    标签: python python-2.7 tkinter


    【解决方案1】:

    如果您为标签指定宽度,即使内容发生变化,它也会尽力遵守该宽度。如果添加的文本大于宽度,文本将被截断。因此,例如,您可以这样创建标签:

    self.lab = Tkinter.Label(self,..., width=40)
    

    如果您希望文本换行,您可以定义wraplength 参数,超过该值的文本将换行到下一行。不幸的是,wraplength 需要屏幕单位(像素)而不是字符宽度,因此您可能需要根据您使用的字体进行一些数学运算。或者,等到原始小部件被渲染,获取它的宽度,然后将其用于包裹长度。

    【讨论】:

      【解决方案2】:

      使用wraplength option:

      self.lab = Tkinter.Label(self,bg='white', relief='groove',
                               textvariable=self.labvar, wraplength=250)
      

      根据The Tkinter Label Widget documentation

      标签可以显示多行文本。您可以使用换行符或使用 wraplength 选项使标签自行换行。什么时候 换行文本,您可能希望使用锚点和对齐选项 让事情看起来完全如你所愿。

      ...

      wraplength=

      确定何时应将标签的文本换成多行。这以屏幕单位给出。默认为 0(不换行)。

      【讨论】:

        猜你喜欢
        • 2018-01-22
        • 1970-01-01
        • 1970-01-01
        • 2016-01-06
        • 1970-01-01
        • 2016-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多