0

所以我有 2 行专门用于消息标签小部件,以在用户使用 tkinter GUI 时向用户显示任何成功/不成功的消息。有些消息太长而无法适应列宽,因此我使用了 Label 小部件的 wraplength 功能将文本换行到下一行。

我遇到的问题是,由于此功能,它会将小部件在此小部件下方的位置移动,对于将文本包装到的每个新行,它会移动 1 行。

所以我想知道是否有任何方法可以让文本换行,而无需移动下部小部件。

消息标签在高度 = 1 的 GUI 中的外观: 在此处输入图像描述

消息标签在将文本换行到高度 = 1 的换行符时的外观:

在此处输入图像描述

消息标签在高度 = 2 的 GUI 中的外观: 在此处输入图像描述

消息标签在将文本换行到高度 = 1 的换行符时的外观: 在此处输入图像描述

我希望第二个图像链接中的消息标签显示它的方式,但保持小部件的垂直布局,如第一个图像链接中所示。

以下代码用于定义小部件:

Choice_list = Listbox(window, selectmode=SINGLE, width = 17, height = 9,
                justify = CENTER)

image = PhotoImage(file = 'Dummy_Logo.gif')
Image_label = Label(window, image = image)

extract = Button(window, text = "Archive News from Webpage",
             command = func1, width = 20)
archive = Button(window, text = "Extract News from Archive",
             command = func2, width = 22)
display = Button(window, text = "Display the News",
             command = func3, width = 14)

Message_Widget = Label(window, text = '', fg = 'black', justify = CENTER,
                   height = 2, wraplength = 300)

Log_Event = Checkbutton(window, text = 'Log Event', variable = logState,
              command = logEvent)

以下代码是小部件的网格对齐方式:

Image_label.grid(row = 1, column = 1)
Choice_list.grid(row = 1, column = 2, rowspan = 9, sticky = W)
Message_Widget.grid(row = 2, column = 1, rowspan = 2)
Log_Event.grid(row = 12, column = 2)
archive.grid(row = 13, column = 1, rowspan = 2, sticky = W)
extract.grid(row = 13, column = 1, rowspan = 2, sticky = E)
display.grid(row = 13, column = 2, rowspan = 2, sticky = W)
4

3 回答 3

1

给标签一个 2 或 3 的高度。问题很简单,它希望默认为一个字符高。在布置所有小部件时,Tkinter 将只分配一个字符高度。当文本换行时,标签必须变得更高,以便文本适合。

通过给它一个 2 或 3 的高度开始,额外的空间被内置到 GUI 中。当文本换行时,标签不必增长以适应新文本。

于 2017-10-24T14:43:06.990 回答
1

这可能不是解决此问题的正确方法,但是我设法通过仅将 Message_Widget 中的 rowspan 参数调整为 rowspan = 11 来获得我正在寻找的结果。

Message_Widget.grid(row = 2, column = 1, rowspan = 11)

这产生了以下结果:

附简短文字: https ://i.stack.imgur.com/XpGLq.png

带有长文本: https ://i.stack.imgur.com/iXwlR.png

于 2017-10-24T16:01:59.400 回答
0

您是否考虑过使用文本小部件进行读数?

例如,如果文本太长,下面的代码将包装文本,并且不会调整小部件的大小。这只是一个示例,但应该足以帮助您解决问题。

from tkinter import *
import random

root = Tk()

text1 = Text(root, height=1, width=40, wrap="word")
text1.grid(row=0, column=0, sticky="ew")

def update_lbl1():
    x = ["Click and drag to see some much longer random text for updating label!!!","some short data"]
    text1.delete("1.0", "end")
    text1.insert("1.0", random.choice(x))

Button(root, text="Change label from list", command = update_lbl1).grid(row=1, column=0)

root.mainloop()
于 2017-10-24T15:59:47.520 回答