4

テキストが任意の種類 (この場合は "Hello World! " を 1 回、2 回、3 回) にすることができるラベル w を含むウィンドウがあります。

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)に分割されます。長い単語やハイフンを分割するオプションもありますが、それについてはドキュメントを参照してください。textwidth

ここに画像の説明を入力

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 に答える