我有一个包含标签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可以获得的最长文本所需的宽度。我怎样才能最轻松地做到这一点?我是否必须遍历所有可能的文本,读取相应的窗口宽度并将最终宽度设置为这些值的最大值?如果这是最好的方法,如何在屏幕上没有窗口的情况下执行此操作?
答案 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
个字符的行。它还有打破长单词或连字符的选项,但请参阅相关文档。
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()