Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter在网格内组织的标签小部件上使用包裹长度的问题_Python_Tkinter_Widget_Tkinter Layout - Fatal编程技术网

Python Tkinter在网格内组织的标签小部件上使用包裹长度的问题

Python Tkinter在网格内组织的标签小部件上使用包裹长度的问题,python,tkinter,widget,tkinter-layout,Python,Tkinter,Widget,Tkinter Layout,因此,我有两行专用于messaged label小部件,用于在用户使用tkinter GUI时向用户显示任何成功/不成功的消息。 有些消息太长,不适合列宽,因此我使用标签小部件的wraplength功能将文本包装到下一行 我遇到的问题是,由于这个特性,它将小部件的位置转移到这个小部件下面,每包装一行文本,就会移动一行 因此,我想知道是否有任何方法可以让文本换行,而不移动较低的小部件 高度为1的GUI中消息标签的外观: 将文本换行到高度为1的换行符时消息标签的外观: 高度为2的GUI中消息标签

因此,我有两行专用于messaged label小部件,用于在用户使用tkinter GUI时向用户显示任何成功/不成功的消息。 有些消息太长,不适合列宽,因此我使用标签小部件的wraplength功能将文本包装到下一行

我遇到的问题是,由于这个特性,它将小部件的位置转移到这个小部件下面,每包装一行文本,就会移动一行

因此,我想知道是否有任何方法可以让文本换行,而不移动较低的小部件

高度为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)
以下代码是小部件的网格对齐方式:

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)

将标签的高度设置为2或3。问题很简单,默认情况下它想要一个字符高。Tkinter在布局所有小部件时只分配一个字符的高度。当文本换行时,标签必须变得更高,这样文本才能适合


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

将标签的高度设置为2或3。问题很简单,默认情况下它想要一个字符高。Tkinter在布局所有小部件时只分配一个字符的高度。当文本换行时,标签必须变得更高,这样文本才能适合


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

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

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

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()

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

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

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()

这可能不是解决这个问题的正确方法,但是我已经成功地通过将Message_小部件中的rowspan参数调整为rowspan=11来获得我想要的结果

Message_Widget.grid(row = 2, column = 1, rowspan = 11)
这产生了以下结果:

用简短的文字:

全文如下:

这可能不是解决此问题的正确方法,但是我已经成功地通过将Message_小部件中的rowspan参数调整为rowspan=11来获得我想要的结果

Message_Widget.grid(row = 2, column = 1, rowspan = 11)
这产生了以下结果:

用简短的文字:

全文如下:

如果没有,很难说,但是
Message\u Widget.grid(row=2,column=1,rowspan=2)
有什么帮助吗?不幸的是,没有。即使使用rowspan=2,也会得到相同的结果。您不能只执行
rowspan=2
。您需要更改GUI的布局以适应该行范围。寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:。显示您的代码。您现在要求我们蒙住眼睛修复一个问题。如果没有,很难说,但是
Message\u Widget.grid(row=2,column=1,rowspan=2)
有什么帮助吗?不幸的是,没有。即使使用rowspan=2,也会得到相同的结果。您不能只执行
rowspan=2
。您需要更改GUI的布局以适应该行范围。寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:。显示您的代码。你现在要求我们蒙着眼睛解决一个问题。好吧,这在某种程度上是有帮助的。当我将其设置为height=2时,它会生成一个与图2相同的GUI布局,因此我尝试将height=1(因为我希望结果与图1相同),但这会将两行文本压缩到一行中。有没有办法让包装好的文本直接移到下面的行中,而不是被包装在同一行中?@DaniGreen:我不明白你的问题。如果您需要更多帮助,您将不得不创建一个新的解决方案,以便我们可以复制问题。简单的回答是,如果你有两行文字,它需要一个高度为2行的标签。我想问的是,是否有任何方法可以换行到新行,而不是在同一行中换行。如果无法做到这一点,我将尝试提供生成此GUI的代码,但其中有相当多的代码。@DaniGreen:您对术语的使用令人困惑。我不知道你说的“换行”是什么意思。您是否在询问如何使标签占据网格布局中的两行?如果是这样,在调用grid时只需指定“rowspan=2”。请放心,你想做的是可能的。问题是,如果没有密码,就不可能确切知道你在问什么。@DaniGreen:请不要“提供我的代码”。我们不需要你所有的代码。我们希望您创建尽可能小的程序来说明问题