如何找出所需的窗口大小?

时间:2013-02-14 10:23:59

标签: python tkinter

我有一个包含标签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可以获得的最长文本所需的宽度。我怎样才能最轻松地做到这一点?我是否必须遍历所有可能的文本,读取相应的窗口宽度并将最终宽度设置为这些值的最大值?如果这是最好的方法,如何在屏幕上没有窗口的情况下执行此操作?

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

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

enter image description here

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