因此,我有2行专用于消息标签小部件,以便在用户使用tkinter GUI时向用户显示任何成功/不成功的消息。 有些消息要长到适合列宽,所以我使用了Label小部件的wraplength特性将文本换行到下一行。
我遇到的问题是,由于此功能,它会将此窗口小部件下方的窗口小部件的位置移动,将每个新行包装到文本上。
所以我想知道是否有任何方法可以将文本换行,而无需移动较低的小部件。
当文本将文本换行到高度为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)
答案 0 :(得分:1)
为标签指定高度为2或3.问题只是默认情况下它想要一个字符高。在布置所有小部件时,Tkinter将仅分配一个高度值的字符。当文本换行时,标签必须变得更高,以便文本适合。
通过给它开始2或3的高度,GUI内置了额外的空间。当文本换行时,标签不必增长以容纳新文本。
答案 1 :(得分:1)
这可能不是解决此问题的正确方法,但是我已经设法通过仅将Message_Widget中的rowspan参数调整为rowspan = 11来获得我正在寻找的结果。
Message_Widget.grid(row = 2, column = 1, rowspan = 11)
这产生了以下结果:
答案 2 :(得分: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()