4

我有一个包含标签 w 的窗口,其文本可以是给定种类中的任何一种(在本例中为“Hello World!”一次、两次和三次):

from Tkinter import *
import time

root = Tk()
text = "Hello, World! "
w = Label(root)

for i in range(1, 4):

    w["text"] = text*i
    w.update_idletasks()
    w.grid()
    w.update_idletasks()
    time.sleep(1)

root.mainloop()

我想将窗口的大小设置为固定宽度。这个宽度应该是 w 可以获得的最长文本所需的宽度。我怎样才能最容易地做到这一点?我是否必须循环浏览所有可能的文本,读取相应的窗口宽度并将最终宽度设置为这些值的最大值?如果这是最好的方法,我怎么能在屏幕上不出现窗口的情况下做到这一点?

4

2 回答 2

1

如果你不循环浏览它们,你怎么知道最大文本的大小?唯一的可能性是早点知道每个的大小,但那样你就已经解决了这个问题。因此,您所要做的就是设置标签并检查窗口所需的宽度,然后检查此宽度是否大于当前最大值并在需要时更新它。如果在此过程中碰巧出现了窗口,您可以调用withdraw,做所有您需要的事情,然后调用deiconify

import time
import random
import Tkinter

root = Tkinter.Tk()
root.withdraw()

text = "Hello, World! "
w = Tkinter.Label()
w.grid()

maxwidth = 0
for _ in range(10):
    i = random.randint(1, 5)
    w["text"] = text*i
    print i
    w.update_idletasks()
    maxwidth = max(maxwidth, root.winfo_reqwidth())

root.wm_minsize(maxwidth, root.winfo_reqheight())
root.wm_maxsize(maxwidth, int(1e6))
root.deiconify()

root.mainloop()
于 2013-02-14T13:04:44.127 回答
0

您可以为标签设置固定宽度,并使用textwrap模块包装文本。textwrap.wrap(text, width)将分成text不超过width字符的行。它也有用于打断长词或连字符的选项,但请参阅相关文档。

在此处输入图像描述

from Tkinter import *
import time
import textwrap

root = Tk()
text = "Hello, World! "
w = Label(root, width=35)
w.grid()

for i in range(1, 4):
    w.update()
    s = text*i 
    s = "\n".join(textwrap.wrap(s, 21))

    w["text"] = s
    time.sleep(1)

root.mainloop()
于 2013-02-14T13:08:40.857 回答